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

MultiPlatform

  1. #include <LEDA/graph.h>
  2. #include <LEDA/ugraph.h>
  3. #include <LEDA/graph_alg.h>
  4. #include <ctype.h>
  5. main()
  6. {
  7.   GRAPH<string,double> G;
  8.   random_graph(G,10,30);
  9.   G.print();
  10.   newline;
  11.   edge_array<int>  cost(G);
  12.   node_array<int>  dist(G);
  13.   node_array<edge> pred(G);
  14.   node_array<int>  ord(G);
  15.   node_array<int>  compnum(G);
  16.   edge_array<int>  flow(G) ;
  17.   node_array<bool> reached(G,false);
  18.   node_array<int>  dfs_num(G);
  19.   node_array<int>  comp_num(G);
  20.   node_array<int>  layer(G,-1);
  21.   node_matrix<int> M(G);
  22.   list<node> nl;
  23.   list<edge> el;
  24.   node       v,w,s,t;
  25.   edge       e;
  26.   UGRAPH<string,double> U = G;
  27.   node_array<int> compnum1(U);
  28.   random_source ran(0,1000);
  29.   forall_edges(e,G)  G[e] = cost[e] = ran();
  30.   cout << "TOPSORT:n";
  31.   if (TOPSORT(G,ord)) 
  32.      cout << "graph is acyclicn";
  33.   else 
  34.      cout << "graph is cyclicn";
  35.   newline;
  36.   newline;
  37.   cout << "DFS:n";
  38.   newline;
  39.   nl = DFS(G,G.choose_node(),reached);
  40.   cout << "DFS:n";
  41.   forall(v,nl) { G.print_node(v); newline; }
  42.   newline;
  43.   newline;
  44.   cout << "DFS_NUM:n";
  45.   DFS_NUM(G,dfs_num,comp_num);
  46.   forall_nodes(v,G) 
  47.   { G.print_node(v);
  48.     cout << string("  dfsnum = %2d  compnum = %2d n",dfs_num[v],comp_num[v]);
  49.    }
  50.   newline;
  51.   newline;
  52.   cout << "BFS:n";
  53.   nl = BFS(G,G.first_node(),layer);
  54.   forall_nodes(v,G)
  55.   { G.print_node(v);
  56.     cout << string("  layer = %2dn",layer[v]);
  57.    }
  58.   newline;
  59.   newline;
  60.   cout << "COMPONENTS:n";
  61.   COMPONENTS(G,compnum);
  62.   forall_nodes(v,G)
  63.   { G.print_node(v);
  64.     cout << string("  compnum = %2d n",compnum[v]);
  65.    }
  66.   newline;
  67.   newline;
  68.   cout << "COMPONENTS1:n";
  69.   COMPONENTS1(G,compnum);
  70.   forall_nodes(v,G)
  71.   { G.print_node(v);
  72.     cout << string("  compnum = %2d n",compnum[v]);
  73.    }
  74.   newline;
  75.   newline;
  76.   cout << "TRANSITIVE_CLOSURE:n";
  77.   graph G1 = TRANSITIVE_CLOSURE(G);
  78.   G1.print("Graph G1 = transitive closure of G");
  79.   newline;
  80.   newline;
  81.   cout << "SPANNING_TREE: n";
  82.   el = SPANNING_TREE(G);
  83.   forall(e,el) 
  84.     { G.print_edge(e);;
  85.       newline;
  86.      }
  87.   newline;
  88.   cout << "MIN_SPANNING_TREE: n";
  89.   el = MIN_SPANNING_TREE(G,cost);
  90.   forall(e,el) 
  91.   { G.print_edge(e);;
  92.     newline;
  93.    }
  94.   newline;
  95.   cout << "STRONG_COMPONENTS:n";
  96.   STRONG_COMPONENTS(G,compnum);
  97.   forall_nodes(v,G) 
  98.   { G.print_node(v);
  99.     cout << string("  compnum = %dn",compnum[v]);
  100.    }
  101.   newline;
  102.   s = G.first_node();
  103.   float T = used_time();
  104.   newline;
  105.   cout << "DIJKSTRA <int>      ";
  106.   cout.flush();
  107.   DIJKSTRA(G,s,cost,dist,pred);
  108.   cout << string("%6.2f sec  n",used_time(T));
  109.   newline;
  110.   cout << "BELLMAN_FORD <int>  ";
  111.   cout.flush();
  112.   BELLMAN_FORD(G,s,cost,dist,pred);
  113.   cout << string("%6.2f sec  n",used_time(T));
  114.   newline;
  115.   cout << "ALL PAIRS SHORTEST PATHS <int> ";
  116.   cout.flush();
  117.   ALL_PAIRS_SHORTEST_PATHS(G,cost,M);
  118.   cout << string("%.2f secn",used_time(T));
  119.   forall_nodes(v,G)
  120.   { forall_nodes(w,G) cout << string("%7d ",M(v,w));
  121.     newline;
  122.    }
  123.   newline;
  124.   cout << "MAX_FLOW<int>:  ";
  125.   cout.flush();
  126.   s = G.first_node();
  127.   t = G.last_node();
  128.   int val = MAX_FLOW(G,s,t,cost,flow) ;
  129.   cout << string("total flow = %d n",val);
  130.   newline;
  131.   edge_array<double>  cost1(G);
  132.   node_array<double>  dist1(G);
  133.   edge_array<double>  flow1(G) ;
  134.   node_matrix<double> M1(G);
  135.   forall_edges(e,G)  cost1[e] = cost[e];
  136.   used_time(T);
  137.   cout << "DIJKSTRA <double>     ";
  138.   cout.flush();
  139.   DIJKSTRA(G,s,cost1,dist1,pred);
  140.   cout << string("%6.2f sec  n",used_time(T));
  141.   newline;
  142.   cout << "BELLMAN_FORD <double> ";
  143.   cout.flush();
  144.   BELLMAN_FORD(G,s,cost1,dist1,pred);
  145.   cout << string("%6.2f sec  n",used_time(T));
  146.   newline;
  147.   cout << "ALL PAIRS SHORTEST PATHS <double>  ";
  148.   cout.flush();
  149.   ALL_PAIRS_SHORTEST_PATHS(G,cost1,M1);
  150.   cout << string("%.2f secn",used_time(T));
  151.   newline;
  152.   cout << "MAX_FLOW<double>: ";
  153.   cout.flush();
  154.   double val1 = MAX_FLOW(G,s,t,cost1,flow1) ;
  155.   cout << string("total flow = %f n",val1);
  156.   newline;
  157. /*
  158.   if (PLANAR(G)) 
  159.     { cout << "G is planarn";
  160.       //cout << "STRAIGHT_LINE_EMBEDDING: n";
  161.       //node_array<int>   xcoord(G);
  162.       //node_array<int>   ycoord(G);
  163.       //STRAIGHT_LINE_EMBEDDING(G,xcoord,ycoord);
  164.       //forall_nodes(v,G) 
  165.       //{ G.print_node(v);
  166.       //  cout << string("  x = %3d   y = %3dn",xcoord[v],ycoord[v]);
  167.       // }
  168.       // newline;
  169.      }
  170.   else 
  171.     cout << "G is not planarn";
  172. */
  173.   newline;
  174.   return 0;
  175. }