poj1523

来源:互联网 发布:linux修改时间 编辑:程序博客网 时间:2024/05/16 18:14
#include<iostream>#include<string.h>#include<fstream>using namespace std;const int gray=1;const int white=0;const int black=2;const int v_num=1000;const int start=0;int graph[v_num][v_num];int color[v_num];int Time;int discoverTime[v_num];int rem[v_num];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[v]++;int wBack=bicompDFS(w);if(wBack>=discoverTime[v]){if(v==start);elserem[v]++;}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);//init int n=1;while(true){for(int i=0;i<v_num;i++){memset(graph[i],0,sizeof(int)*v_num);color[i]=white;rem[i]=1;}rem[0]=0;int v1,v2;int temp=0;while(scanf("%d",&v1)&&v1!=0){temp++;scanf("%d",&v2);graph[v1-1][v2-1]=graph[v2-1][v1-1]=1;//printf("%d %d\n",v1,v2);}if(v1==0&&temp==0)return 0;Time=0;bicompDFS(start);printf("Network #%d\n",n++);bool flag=false;for(int i=0;i<v_num;i++){if(rem[i]>1){printf("  SPF node %d leaves %d subnets\n",i+1,rem[i]);flag=true;}}if(flag==false)printf("  No SPF nodes\n");printf("\n");}return 0;}