您的位置:首页 > 其它

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

2013-08-09 00:24 411 查看
#include<iostream>
#include<vector>
using namespace std;

const int maxn=12;

int vis[maxn];

vector<int> G[maxn];

int dfs_clock;
int pre[maxn];
int post[maxn];
int cc[maxn];
int current_cc=0;
void dfs(int u)
{
//pre

vis[u]=1;
pre[u]=++dfs_clock;
cc[u]=current_cc;
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(!vis[v]) dfs(v);

}

post[u]=++dfs_clock;
//post
}

void init()
{
for(int i=0;i<12;i++)
vis[i]=0;

G[0].push_back(1);
G[0].push_back(4);

G[1].push_back(0);

G[2].push_back(3);
G[2].push_back(6);
G[2].push_back(7);

G[3].push_back(2);
G[3].push_back(7);

G[4].push_back(0);
G[4].push_back(8);
G[4].push_back(9);

G[6].push_back(2);
G[6].push_back(7);
G[6].push_back(10);

G[7].push_back(2);
G[7].push_back(3);
G[7].push_back(6);
G[7].push_back(10);
G[7].push_back(11);

G[8].push_back(4);
G[8].push_back(9);

G[9].push_back(4);
G[9].push_back(8);

G[10].push_back(6);
G[10].push_back(7);

G[11].push_back(7);

dfs_clock=0;
}

int main()
{
init();

for(int i=0;i<12;i++)
{
if(vis[i]==0)
{
current_cc++;
dfs(i);
}

}

//    dfs(0);
for(int i=0;i<12;i++)
cout<<i+1<<" "<<pre[i]<<" "<<post[i]<<" "<<cc[i]<<endl;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: