class Vertex {
public:
- int id;
-
+ int id, iteration;
Edge *root_edge;
scalar_t distance_from_source;
-
Vertex *pred_vertex;
Edge *pred_edge;
Edge *edge_heap;
Vertex *vertices;
Vertex *source, *sink;
-
public:
Graph(int nb_vertices, int nb_edges, int *from, int *to, scalar_t *lengths,
int source, int sink);
for(int n = 0; n < nb_vertices; n++) {
for(Edge *e = vertices[n].root_edge; e; e = e->next) {
if(e->work_length < 0) {
- cerr << "DEBUG error in find_shortest_path: Edge fixed lengths have to be positive."
+ cerr << "DEBUG error in find_shortest_path: Edge work lengths have to be positive."
<< endl;
abort();
}
vertices[v].distance_from_source = FLT_MAX;
vertices[v].pred_vertex = 0;
vertices[v].pred_edge = 0;
+ vertices[v].iteration = 0;
}
+ int iteration = 0;
+
int front_size = 0, new_front_size;
front[front_size++] = source;
source->distance_from_source = 0;
do {
new_front_size = 0;
+ iteration++;
for(int f = 0; f < front_size; f++) {
v = front[f];
for(Edge *e = v->root_edge; e; e = e->next) {
tv->distance_from_source = d;
tv->pred_vertex = v;
tv->pred_edge = e;
- new_front[new_front_size++] = tv;
+ if(tv->iteration < iteration) {
+ new_front[new_front_size++] = tv;
+ tv->iteration = iteration;
+ }
}
}
}