这道题有个特殊数据当n=1是连通的!这道题考的是有向图的强连通的判定,我的做法是,从i-->n如果i和j是连通的 并且j<i那么i就是强连通的!
代码:
#include<stdio.h>
#include<string.h>
struct path{
int s,e;
int next;
}ar[100005];
int fb[10005],flag[10005],Q[10005];
int n;
int Judge(int x){
int front,rear,Count=0,i;
memset(flag,0,sizeof(flag));
front=0;rear=1;
Q[0]=x;flag[x]=1;
while(front<rear){
i=Q[front];
front++;
for(i=fb[i];i;i=ar[i].next){
if(!flag[ar[i].e]){
flag[ar[i].e]=1;
Count++;
if(Count==n-1 || ar[i].e<x){
return 1;
}
Q[rear]=ar[i].e;
rear++;
}
}
}
return 0;
}
int main(){
int m,i,x,y;
while(scanf("%d%d",&n,&m)){
if(n+m==0)
break;
memset(fb,0,sizeof(fb));
for(i=1;i<=m;i++){
scanf("%d%d",&x,&y);
ar[i].s=x;ar[i].e=y;ar[i].next=fb[x];fb[x]=i;
}
for(i=1;i<=n;i++)
if(!Judge(i))
break;
if(i>n || n==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}