_dfsnum.c
Upload User: gzelex
Upload Date: 2007-01-07
Package Size: 707k
Code Size: 2k
Development Platform:

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  _dfsnum.c
  6. +
  7. +  Copyright (c) 1995  by  Max-Planck-Institut fuer Informatik
  8. +  Im Stadtwald, 66123 Saarbruecken, Germany     
  9. +  All rights reserved.
  10. *******************************************************************************/
  11. /*******************************************************************************
  12. *                                                                              *
  13. *  DFS_NUM (depth first search numbering)                                      *
  14. *                                                                              *
  15. *******************************************************************************/
  16. #include <LEDA/graph_alg.h>
  17. static int dfs_count1,dfs_count2;
  18. static void dfs(node v, node_array<bool>& reached, 
  19.                         node_array<int>& dfsnum, 
  20.                         node_array<int>& compnum,
  21.                         list<edge>& T )
  22. { node w;
  23.   edge e;
  24.   reached[v] = true;
  25.   dfsnum[v] = ++dfs_count1;
  26.   forall_adj_edges(e,v) 
  27.     { w = target(e);
  28.       if (!reached[w]) 
  29.        { T.append(e);
  30.          dfs(w,reached,dfsnum,compnum,T);
  31.         }
  32.      }
  33.   compnum[v] = ++dfs_count2;
  34. list<edge> DFS_NUM(const graph& G, node_array<int>& dfsnum, 
  35.                                    node_array<int>& compnum)
  36.   list<edge> T;
  37.   node_array<bool> reached(G,false);
  38.   node v;
  39.   dfs_count1 = dfs_count2 = 0;
  40.   forall_nodes(v,G) if (!reached[v]) dfs(v,reached,dfsnum,compnum,T);
  41.   return T;
  42. }