// From Louis Lavery /*Expected Output:- A: 0 A B: 11 A Actual Output:- A: 0 A B: 2147483647 B */ #include #include #include #include #include int main() { using namespace boost; enum { A, B, Z }; char const name[] = "ABZ"; int const numVertex = static_cast(Z) + 1; typedef std::pair Edge; Edge edge_array[] = {Edge(B,A)}; int const numEdges = sizeof(edge_array) / sizeof(Edge); int const weight[numEdges] = {11}; typedef adjacency_list > Graph; Graph g(edge_array, edge_array + numEdges, numVertex); Graph::edge_iterator ei, ei_end; property_map::type weight_pmap = get(edge_weight, g); int i = 0; for(tie(ei, ei_end) = edges(g); ei != ei_end; ++ei, ++i) weight_pmap[*ei] = weight[i]; std::vector parent(numVertex); for(i = 0; i < numVertex; ++i) parent[i] = i; int inf = std::numeric_limits::max(); std::vector distance(numVertex, inf); distance[A] = 0; // Set source distance to zero bool const r = bellman_ford_shortest_paths (g, int (numVertex), weight_map(weight_pmap).distance_map(&distance[0]). predecessor_map(&parent[0])); if (r) { for(int i = 0; i < numVertex; ++i) { std::cout << name[i] << ": "; if (distance[i] == inf) std::cout << std::setw(3) << "inf"; else std::cout << std::setw(3) << distance[i]; std::cout << " " << name[parent[i]] << std::endl; } } else { std::cout << "negative cycle" << std::endl; } return boost::exit_success; }