码迷,mamicode.com
首页 > 编程语言 > 详细

tarjan割点算法代码实现

时间:2019-05-02 21:44:51      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:就是   实现   main   lse   str   The   pre   include   else   

#include<iostream>
using namespace std;
int n,m,x,y;
int e[9][9];
int root=1;
int timex;//时间戳 
int num[9],low[9],flag[9];//flag标记割点 
int min(int a,int b){
	
	if(a<b){
		return a;
	}else{
		return b;
	}
}

void dfs(int cur,int father){
	int child=0;
	timex++;
	num[cur]=timex;
	low[cur]=timex;
	for(int i=0;i<n;i++){
		if(e[cur][i]==1&&num[i]==0){//是否联通,是否被访问过 
			child++;
			dfs(i,cur);
			low[cur]=min(low[cur],low[i]);
			if(cur!=root&&low[i]>=num[cur]){
				flag[cur]=1;
			}else if(cur==root&&child>=2){
				flag[cur]=1;
			}
		}
		
		if(e[cur][i]==1&&num[i]==1){//联通,但被访问过 
			if(i!=father){//i不是当前节点的父亲,就是说i是当前节点的祖先 
			   low[cur]=min(low[cur],num[i]); 
			}
		} 
		
		
	} 
}
int main(){
	
	
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			e[i][j]=0;
		}
	}
	for(int j=0;j<m;j++){
		cin>>x>>y;
		e[x][y]=1;
		e[y][x]=1;
	}
	
	dfs(1,root);
	for(int i=0;i<n;i++){
		if(flag[i]==1){
			cout<<i<<" ";
		}
	} 
	return 0;
}

  

tarjan割点算法代码实现

标签:就是   实现   main   lse   str   The   pre   include   else   

原文地址:https://www.cnblogs.com/heroliu/p/10803298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!