This is a newbie question.
Do boost graph library support an vertex with x, y
coordinates?
i.e. typedef std::pair Vertex;
I modify the dijkstra-example.cpp sample program in
the libs/graph/example directory but it fails to
compile.
// new dijkstra-example.cpp
int
main(int, char *[])
{
typedef adjacency_list < listS, vecS, directedS,
no_property, property < edge_weight_t, int > >
graph_t;
typedef graph_traits < graph_t >::vertex_descriptor
vertex_descriptor;
typedef graph_traits < graph_t >::edge_descriptor
edge_descriptor;
typedef std::pair Vertex;
typedef std::pair Edge;
const int num_nodes = 5;
enum nodes { A, B, C, D, E };
char name[] = "ABCDE";
Vertex a = Vertex(0, 0);
Vertex b = Vertex(1, 2);
Vertex c = Vertex(2, 2);
Edge edge_array[] = { Edge(a, b), Edge(a, c) };
int weights[] = { 1, 200 };
int num_arcs = sizeof(edge_array) / sizeof(Edge);
graph_t g(edge_array, edge_array + num_arcs,
weights, num_nodes);
property_map::type weightmap
= get(edge_weight, g);
std::vector p(num_vertices(g));
std::vector<int> d(num_vertices(g));
vertex_descriptor s = vertex(A, g);
dijkstra_shortest_paths(g, s,
predecessor_map(&p[0]).distance_map(&d[0]));
std::cout << "distances and parents:" << std::endl;
graph_traits < graph_t >::vertex_iterator vi, vend;
for (tie(vi, vend) = vertices(g); vi != vend; ++vi)
{
std::cout << "distance(" << name[*vi] << ") = " <<
d[*vi] << ", ";
std::cout << "parent(" << name[*vi] << ") = " <<
name[p[*vi]] << std::
endl;
}
std::cout << std::endl;
return EXIT_SUCCESS;
}
// compile output is:
bjam
...found 518 targets...
...updating 4 targets...
gcc-C++-action
/home/tcma/cpp/boosttcma/libs/graph/dijkstra-example.test/gcc/debug/inlining-on/dijkstra-example.o
/home/tcma/cpp/boost_1_31_0/boost/graph/detail/adjacency_list.hpp:
In constructor `boost::vec_adj_list_impl::vec_adj_list_impl(typename
Config::vertices_size_type, EdgeIterator,
EdgeIterator, EdgePropertyIterator) [with EdgeIterator
= main(int, char**)::Edge*, EdgePropertyIterator =
int*, Graph = boost::adjacency_list, boost::no_property,
boost::listS>, Config =
boost::detail::adj_list_gen, boost::no_property,
boost::listS>, boost::vecS, boost::listS,
boost::directedS, boost::no_property,
boost::property, boost::no_property,
boost::listS>::config, Base =
boost::directed_graph_helper, boost::no_property,
boost::listS>, boost::vecS, boost::listS,
boost::directedS, boost::no_property,
boost::property, boost::no_property,
boost::listS>::config>]':
/home/tcma/cpp/boost_1_31_0/boost/graph/adjacency_list.hpp:363:
instantiated from
`boost::adjacency_list::adjacency_list(EdgeIterator, EdgeIterator,
EdgePropertyIterator, typename
boost::detail::adj_list_gen, VertexListS, OutEdgeListS,
DirectedS, VertexProperty, EdgeProperty,
GraphProperty, EdgeListS>::type::vertices_size_type,
typename
boost::detail::adj_list_gen, VertexListS, OutEdgeListS,
DirectedS, VertexProperty, EdgeProperty,
GraphProperty, EdgeListS>::type::edges_size_type,
const GraphProperty&) [with EdgeIterator = main(int,
char**)::Edge*, EdgePropertyIterator = int*,
OutEdgeListS = boost::listS, VertexListS =
boost::vecS, DirectedS = boost::directedS,
VertexProperty = boost::no_property, EdgeProperty =
boost::property, GraphProperty =
boost::no_property, EdgeListS = boost::listS]'
/home/tcma/cpp/boosttcma/libs/graph/dijkstra-example.cpp:146:
instantiated from here
/home/tcma/cpp/boost_1_31_0/boost/graph/detail/adjacency_list.hpp:1904:
error: no matching function for call to
`add_edge(main(int, char**)::Vertex&, main(int,
char**)::Vertex&, int&,
boost::adjacency_list, boost::no_property,
boost::listS>&)'
/home/tcma/cpp/boost_1_31_0/boost/graph/detail/adjacency_list.hpp:599:
note: candidates are: std::pair boost::add_edge(typename
Config::vertex_descriptor, typename
Config::vertex_descriptor, const typename
Config::edge_property_type&,
boost::directed_graph_helper<Config>&) [with Config =
boost::detail::adj_list_gen, boost::no_property,
boost::listS>, boost::vecS, boost::listS,
boost::directedS, boost::no_property,
boost::property, boost::no_property,
boost::listS>::config]
/home/tcma/cpp/boost_1_31_0/boost/graph/detail/adjacency_list.hpp:1987:
note: std::pair
boost::add_edge(typename Config::vertex_descriptor,
typename Config::vertex_descriptor, const typename
Config::edge_property_type&,
boost::vec_adj_list_impl&) [with Graph =
boost::adjacency_list, boost::no_property,
boost::listS>, Config =
boost::detail::adj_list_gen, boost::no_property,
boost::listS>, boost::vecS, boost::listS,
boost::directedS, boost::no_property,
boost::property, boost::no_property,
boost::listS>::config, Base =
boost::directed_graph_helper, boost::no_property,
boost::listS>, boost::vecS, boost::listS,
boost::directedS, boost::no_property,
boost::property, boost::no_property,
boost::listS>::config>]
set -e
g++ -c -Wall -ftemplate-depth-100 -g -O0
-Wno-inline -I"../../../bin/boost/libs/random/test"
-I "/home/tcma/cpp/boost_1_31_0" -o
"/home/tcma/cpp/boosttcma/libs/graph/dijkstra-example.test/gcc/debug/inlining-on/dijkstra-example.o"
"/home/tcma/cpp/boosttcma/libs/graph/dijkstra-example.cpp"
/usr/bin/objcopy --set-section-flags
.debug_str=contents,debug
"/home/tcma/cpp/boosttcma/libs/graph/dijkstra-example.test/gcc/debug/inlining-on/dijkstra-example.o"
...failed gcc-C++-action
/home/tcma/cpp/boosttcma/libs/graph/dijkstra-example.test/gcc/debug/inlining-on/dijkstra-example.o...
...removing
/home/tcma/cpp/boosttcma/libs/graph/dijkstra-example.test/gcc/debug/inlining-on/dijkstra-example.o
...skipped
/home/tcma/cpp/boosttcma/libs/graph/dijkstra-example
for lack of
dijkstra-example.o...
...skipped
/home/tcma/cpp/boosttcma/libs/graph/dijkstra-example.run
for lack of
/home/tcma/cpp/boosttcma/libs/graph/dijkstra-example...
...failed updating 1 target...
...skipped 3 targets...
______________________________________________________________________
Post your free ad now! http://personals.yahoo.ca