| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
帮忙看看阿!!WA了好多了次!!#include <cstdlib>
#include <iostream>
using namespace std;
const int define=101;
int low[define],vi[define],A[define][define],label[define];
int cnode=0;
int judge(int n);
void Dfs(int v,int n);
int main(void)
{
int n=0,total=0,a=0,i=0,j=0,num=0,len=0;
char B[define];
while(cin>>n&&n){
memset(low,0,sizeof(low));
memset(vi,0,sizeof(vi));
memset(A,0,sizeof(A));
memset(label,0,sizeof(label));
total=0;
cnode=0;
getchar();
for(i=1;i<=n;i++){ //处理输入数据
j=num=0;
gets(B);
len=strlen(B);
if(len==1&&B[0]=='0') break;
while(B[j]!=' '){
num=num*10+(B[j]-48);
j++;
}
for(j++;j<len;j++)
if(B[j]!=' '){
a=0;
while(B[j]!=' '&&j<len){
a=a*10+(B[j]-48);
j++;
}
A[num][a]=A[a][num]=1;
}
}
vi[1]=++cnode;
low[1]=1;
for(i=1;i<=n;i++)
if(A[1][i]==1) break; //对第一个节点的第一个分支节点开始深度搜索
Dfs(i,n);
if(cnode<n){ //cnode表示访问了多少个节点
label[1]=1;
for(i=1;i<=n;i++)
if(A[1][i]==1&&vi[i]==0)
Dfs(i,n);
}
for(i=1;i<=n;i++)
if(label[i]==1) total++;
cout<<total<<endl;
}
return 0;
}
void Dfs(int v,int n) //n represent the total nodes number
{
int i=0,min=0;
vi[v]=min=++cnode;// vi表示访问顺序
for(i=1;i<=n;i++)
if(A[v][i]==1){
if(vi[i]==0){
Dfs(i,n);
if(low[i]<min) min=low[i];
if(low[i]>=vi[v])
label[v]=1;
}
else if(vi[i]<min)
min=vi[i];
}
low[v]=min;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator