2140=数据结构实验之图论十:判断给定图是否存在合法拓扑序列

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 int map[100][100],visited[100],du[100],flag,n,m,i,j,k;
 5 int main()
 6 {
 7     while(~scanf("%d %d",&n,&m))
 8     {
 9         memset(map,0,sizeof(map));
10         memset(visited,0,sizeof(visited));
11         memset(du,0,sizeof(du));
12         while(m--)
13         {
14             int a,b;
15             scanf("%d%d",&a,&b);
16             map[a][b]=1;
17             du[b]++;
18         }
19         for(i=1; i<=n; i++)
20         {
21             flag=0;
22             for(j=1; j<=n; j++)
23             {
24                 if(visited[j]==0&&du[j]==0)
25                 {
26                     visited[j]=1;
27                     for(k=1; k<=n; k++)
28                     {
29                         if(map[j][k]==1)
30                             du[k]--;
31                     }
32                     flag=1;
33                     break;
34                 }
35             }
36         }
37         if(flag==1)printf("YES
");
38         else printf("NO
");
39     }
40     return 0;
41 }
原文地址:https://www.cnblogs.com/Angfe/p/11783568.html