判断给定图是否存在合法拓扑序列
题目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2140&cid=1186
1 #include<stdio.h> 2 #include<string.h> 3 int d[15],map[15][15],vis[15]; 4 int main() 5 { 6 int i,j,k,f,n,m,u,v; 7 while(~scanf("%d%d",&n,&m)) 8 { 9 memset(d,0,sizeof(d)); 10 memset(map,0,sizeof(map)); 11 memset(vis,0,sizeof(vis)); 12 for(i=1; i<=m; i++) 13 { 14 scanf("%d%d",&u,&v); 15 map[u][v]=1; 16 d[v]++; 17 } 18 for(i=1; i<=n; i++) 19 { 20 f=0; 21 for(j=1; j<=n; j++) 22 { 23 if(d[j]==0&&vis[j]==0) 24 { 25 vis[j]=1; 26 for(k=1; k<=n; k++) 27 if(map[j][k]) 28 d[k]--; 29 f=1; 30 break;//找到一个入度为0的就结束 31 } 32 } 33 if(f==0)//如果节点未输出完,而图中就没有了入度为0的节点,则说明有环,不合法。 34 break; 35 } 36 if(f==0) 37 printf("NO\n"); 38 else 39 printf("YES\n"); 40 } 41 }