neg_cycle.c
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:1k
开发平台:

MultiPlatform

  1. #include <LEDA/graph.h>
  2. #include <LEDA/graph_alg.h>
  3. main()
  4. {
  5. GRAPH<int,int> G;
  6. node u;
  7. edge e;
  8. test_graph(G);
  9. edge_array<int>  cost(G,0);
  10. node_array<int>  dist(G,0);
  11. node_array<edge> pred(G,nil);
  12. node_array<int>  label(G,0);
  13. int mi = read_int("min cost = ");
  14. int ma = read_int("max cost = ");
  15. forall_edges(e,G) cost[e] = G[e] = rand_int(mi,ma);
  16. node s = G.first_node();
  17. float T = used_time();
  18. cout << "BELLMAN_FORD <int>  " << flush;
  19. bool b = BELLMAN_FORD(G,s,cost,dist,pred);
  20. cout << string("%6.2f sec  ",used_time(T)) << endl;
  21. newline;
  22. if (b == false)
  23.   { cout << "Negative cycle:" << endl;
  24.     int count = 1;
  25.     forall_nodes(u,G)
  26.     { if (label[u] == 0)
  27.        { while (label[u]==0)
  28.          { label[u]=count;
  29.            u=source(pred[u]);
  30.           }
  31.          if (label[u] == count)  // cycle found
  32.          { list<edge> cycle;
  33.            for(e=pred[u]; source(e)!=u; e=pred[source(e)]) cycle.push(e);
  34.            cycle.push(e);
  35.            forall(e,cycle)
  36.            { G.print_edge(e);
  37.              newline;
  38.             }
  39.            newline;
  40.           }
  41.         }
  42.       count++;
  43.      }
  44.    }
  45. else
  46.   cout << "No negativ cycle found" << endl;
  47. return 0;
  48. }