学习笔记--图论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 }