求连通图的割点

来源:互联网 发布:搜狗输入法linux安装 编辑:程序博客网 时间:2024/04/30 13:18
#include<iostream>#include<fstream>using namespace std;const int gray=1;const int white=0;const int black=2;const int v_num=10;const int start=0;int graph[v_num][v_num];int color[v_num];int Time;int discoverTime[v_num];int rem=0;int bicompDFS(int v){color[v]=gray;Time++;int back=discoverTime[v]=Time;for(int w=0;w<v_num;w++){if(graph[v][w]==0)continue;if(color[w]==white){if(v==start)rem++;int wBack=bicompDFS(w);if(wBack>=discoverTime[v]){if(v==start&&rem<=1)  ;elsecout<<char(v+'A')<<"is articulation points"<<endl;}back=min(back,wBack);}else if(color[w]==gray){back=min(discoverTime[w],back);}}color[v]=black;return back;}int main(){freopen("input.txt","r",stdin);//input graph////char ch1,ch2;int i,j;for(int i=0;i<v_num;i++){color[i]=white;for(int j=0;j<v_num;j++)graph[i][j]=0;}while(scanf("%c %c\n",&ch1,&ch2)!=EOF)   //输入边   graph[ch2-'A'][ch1-'A']=graph[ch1-'A'][ch2-'A']=1;Time=0;bicompDFS(start);return 0;}