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

MultiPlatform

  1. #include <LEDA/graph.h>
  2. #include <LEDA/graph_alg.h>
  3. GRAPH<int,int> shortest_path_tree(GRAPH<int,int>& G, edge_array<int>& cost)
  4. {
  5.   // returns a shortest-paths tree  as a subgraph of G
  6.   node_array<int> dist(G);
  7.   node_array<edge> pred(G);
  8.   node s = G.first_node();
  9.   DIJKSTRA(G,s,cost,dist,pred);
  10.   list<edge> el;
  11.   node v;
  12.   forall_nodes(v,G) if (pred[v]!=0) el.append(pred[v]);
  13.   return GRAPH<int,int>(G,G.all_nodes(),el);   // subgraph constructor
  14. }
  15. main()
  16. { GRAPH<int,int> G;
  17.   test_graph(G);
  18.   edge_array<int> cost(G);
  19.   int a = read_int("a = ");
  20.   int b = read_int("b = ");
  21.   random_source ran(a,b);
  22.   edge e;
  23.   forall_edges(e,G) cost[e] = G[e] = ran();
  24.   GRAPH<int,int> S = shortest_path_tree(G,cost);
  25.   G.print("graph G");
  26.   newline; 
  27.   S.print("subgraph S");
  28.   newline; 
  29.   edge_array<int> cost1(S);
  30.   forall_edges(e,S) cost1[e] = S[e];  
  31.   GRAPH<int,int> S1 = shortest_path_tree(S,cost1);
  32.   S1.print("subgraph S1");
  33.   newline;
  34. return 0;
  35. }