-
- // If that length is negative
- if(total_length < 0.0) {
- // Invert all the edges along the best path
- for(Vertex *v = sink; v->pred_edge; v = v->pred_vertex) {
- Edge *e = v->pred_edge;
- e->terminal_vertex = v->pred_vertex;
- e->occupied = 1 - e->occupied;
- e->length = - e->length;
- e->work_length = - e->work_length;
- v->pred_vertex->del_edge(e);
- v->add_edge(e);
- }
- }
- }
- } while(total_length < 0.0);
-
- delete[] front;
- delete[] new_front;
-
- for(int n = 0; n < nb_vertices; n++) {
- Vertex *v = &vertices[n];
- for(Edge *e = v->root_edge; e; e = e->next) {
- result_edge_occupation[e->id] = e->occupied;
- }
- }
-}
-
-void find_best_paths(int nb_vertices,
- int nb_edges, int *ea, int *eb, scalar_t *el,
- int source, int sink,
- int *result_edge_occupation) {
- Graph graph(nb_vertices, nb_edges, ea, eb, el, source, sink);
- graph.find_best_paths(result_edge_occupation);
-}
-
-void dot_print(int nb_vertices,
- int nb_edges, int *ea, int *eb, scalar_t *el,
- int source, int sink,
- int *edge_occupation) {
- cout << "digraph {" << endl;
- cout << " node[shape=circle];" << endl;
- for(int e = 0; e < nb_edges; e++) {
- if(edge_occupation[e]) {
- cout << " " << ea[e] << " -> " << eb[e] << " [style=bold,color=black,label=\"" << el[e] << "\"];" << endl;
- } else {
- cout << " " << ea[e] << " -> " << eb[e] << " [color=gray,label=\"" << el[e] << "\"];" << endl;