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

MultiPlatform

  1. #include <LEDA/graph_alg.h>
  2. #include <LEDA/graph_edit.h>
  3. #include <LEDA/array.h>
  4. int STRONG(graph& G, node_array<int>& compnum)
  5.   node v,w;
  6.   int n = G.number_of_nodes();
  7.   int count = 0;
  8.   array<node> V(1,n);
  9.   list<node>  S;
  10.   node_array<int>  dfs_num(G);
  11.   node_array<int>  compl_num(G);
  12.   node_array<bool> reached(G,false);
  13.   DFS_NUM(G,dfs_num,compl_num);
  14.   forall_nodes(v,G) V[compl_num[v]] = v;
  15.   G.rev();
  16.   for(int i = n; i > 0; i--)
  17.    { if ( ! reached[V[i]] ) 
  18.      { S = DFS(G,V[i],reached);
  19.        forall(w,S) compnum[w] = count;
  20.        count++;
  21.       }
  22.     }
  23.  return count;
  24.    
  25. }
  26. main()
  27. {
  28.   GRAPH<point,int>  G;
  29.   window W;
  30.   for(;;)
  31.   { 
  32.     graph_edit(W,G);
  33.     node_array<int> comp_num(G);
  34.     STRONG(G,comp_num);
  35.     node v;
  36.     forall_nodes(v,G)
  37.     { int i = comp_num[v];
  38.        W.draw_int_node(G[v],i,i%16);
  39.      }
  40.    if (W.read_mouse() == 3) break;
  41.   }
  42.   return 0;
  43. }