poj1523

#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) ; else rem[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; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值