int dijkstra::check(graph& G) { if ((s == node()) || (!weights_set)) { return GTL_ERROR; } bool source_found = false; graph::node_iterator node_it; graph::node_iterator nodes_end = G.nodes_end(); for (node_it = G.nodes_begin(); node_it != nodes_end; ++node_it) { if (*node_it == s) { source_found = true; break; } } if (!source_found) { return(GTL_ERROR); } graph::edge_iterator edge_it; graph::edge_iterator edges_end = G.edges_end(); for(edge_it = G.edges_begin(); edge_it != edges_end; ++edge_it) { if (weight[*edge_it] < 0.0) { return false; } } return GTL_OK; }
void dijkstra::init(graph& G) { dist.init(G, -1.0); mark.init(G, black); if (preds_set) { pred.init(G, edge()); graph::node_iterator node_it; graph::node_iterator nodes_end = G.nodes_end(); for (node_it = G.nodes_begin(); node_it != nodes_end; ++node_it) { shortest_path_node_list[(*node_it)].clear(); shortest_path_edge_list[(*node_it)].clear(); } } }