#include <boost/graph/graph_traits.hpp> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/dijkstra_shortest_paths.hpp> using namespace boost; #include <iostream> // for std::cout #include <utility> // for std::pair #include <algorithm> // for std::for_each using namespace std; #include <limits.h> int main(int,char*[]) { typedef adjacency_list < listS, vecS, /*directedS*/undirectedS, no_property, property < edge_weight_t, int > > Graph; typedef graph_traits < Graph >::vertex_descriptor VertexDescriptor; typedef graph_traits < Graph >::edge_descriptor EdgeDescriptor; typedef graph_traits<Graph>::edge_iterator EdgeIterator; typedef graph_traits<Graph>::vertex_iterator VertexIterator; typedef std::pair<int, int> Edge; typedef std::pair<EdgeDescriptor, bool> EdgeExistResult; const int vertice_num = 65536; Graph g(vertice_num); add_edge(0, 1, 1, g); // first, second, weight, graph add_edge(1, 2, 1, g); add_edge(2, 3, 1, g); add_edge(1, 3, 1, g); EdgeExistResult edge_exist = edge(3, 1, g); if (edge_exist.second == true) { cout << "yes" << endl; } else { cout << "no" << endl; } EdgeIterator ei, ei_end; for (tie(ei, ei_end) = edges(g); ei != ei_end; ++ei) { cout << source(*ei, g) << "," << target(*ei, g) << endl; } /* graph_traits<Graph>::vertex_iterator vi, vi_end; for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) { cout << *vi << endl; } */ vector<VertexDescriptor> parent(num_vertices(g)); vector<int> dist(num_vertices(g)); VertexDescriptor s = vertex(3, g); dijkstra_shortest_paths(g, s, predecessor_map(&parent[0]).distance_map(&dist[0])); // shortest path from 3 to 0 if (dist[0] != INT_MAX) cout << dist[0] << endl; int i = 0; while (i != 3) { cout << i << endl; i = parent[i]; } return 0; }