学习笔记--图论DFS,联通分量,时间戳

  1 #include<iostream>
  2 #include<vector>
  3 using namespace std;
  4 
  5 const int maxn=12;
  6 
  7 int vis[maxn];
  8 
  9 vector<int> G[maxn];
 10 
 11 
 12 int dfs_clock;
 13 int pre[maxn];
 14 int post[maxn];
 15 int cc[maxn];
 16 int current_cc=0;
 17 void dfs(int u)
 18 {
 19   //pre
 20 
 21    vis[u]=1;
 22    pre[u]=++dfs_clock;
 23    cc[u]=current_cc;
 24    for(int i=0;i<G[u].size();i++)
 25    {
 26        int v=G[u][i];
 27       if(!vis[v]) dfs(v);
 28 
 29    }
 30 
 31    post[u]=++dfs_clock;
 32   //post
 33 }
 34 
 35 void init()
 36 {
 37   for(int i=0;i<12;i++)
 38     vis[i]=0;
 39 
 40   G[0].push_back(1);
 41   G[0].push_back(4);
 42 
 43   G[1].push_back(0);
 44 
 45   G[2].push_back(3);
 46   G[2].push_back(6);
 47   G[2].push_back(7);
 48 
 49 
 50   G[3].push_back(2);
 51   G[3].push_back(7);
 52 
 53 
 54   G[4].push_back(0);
 55   G[4].push_back(8);
 56   G[4].push_back(9);
 57 
 58 
 59   G[6].push_back(2);
 60    G[6].push_back(7);
 61     G[6].push_back(10);
 62 
 63   G[7].push_back(2);
 64   G[7].push_back(3);
 65   G[7].push_back(6);
 66   G[7].push_back(10);
 67   G[7].push_back(11);
 68 
 69   G[8].push_back(4);
 70   G[8].push_back(9);
 71 
 72 
 73   G[9].push_back(4);
 74    G[9].push_back(8);
 75 
 76     G[10].push_back(6);
 77     G[10].push_back(7);
 78 
 79     G[11].push_back(7);
 80 
 81     dfs_clock=0;
 82 }
 83 
 84 
 85 int main()
 86 {
 87     init();
 88 
 89     for(int i=0;i<12;i++)
 90     {
 91        if(vis[i]==0)
 92        {
 93            current_cc++;
 94            dfs(i);
 95        }
 96 
 97     }
 98 
 99 
100 
101    //    dfs(0);
102     for(int i=0;i<12;i++)
103        cout<<i+1<<" "<<pre[i]<<" "<<post[i]<<" "<<cc[i]<<endl;
104 
105 
106 }
原文地址:https://www.cnblogs.com/814jingqi/p/3247212.html