#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)
;
else
cout<<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;
}
求连通图的割点
最新推荐文章于 2022-04-29 11:41:45 发布