拓扑排序模板 hdu 2094

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2094

//声明:该题不是我写的。

 1  #include<stdio.h>
 2  #include<string.h>
 3  int nu,m,sum;
 4  int map[1001][1001];
 5  int degree[1001];
 6  char s[1001][51];
 7  int a[1001];
 8 
 9  int find(char *ss)
10  {
11      int i;
12      for(i=0;i<nu;i++)
13      {
14          if(strcmp(ss,s[i])==0)
15              return i;
16      }
17      strcpy(s[i],ss);
18      return nu++;
19  }
20 
21  int topo()
22  {
23      int i,l=0;
24      for(i=0;i<nu;i++)
25          if(!degree[i])
26              l++;
27      return l;
28  }
29 
30  int main()
31  {
32      char s1[101],s2[101];
33      int i,x,y;
34      while(~scanf("%d",&m))
35      {
36          if(m==0)
37              break;
38          nu=0;
39          memset(map,0,sizeof(map));
40          memset(degree,0,sizeof(degree));
41          memset(a,0,sizeof(a));
42          for(i=0;i<m;i++)
43          {
44              scanf("%s %s",s1,s2);
45              x=find(s1);
46              y=find(s2);
47              if(map[x][y]==0)
48              {
49                  map[x][y]=1;
50                  degree[y]++;
51              }
52          }
53          if(topo()==1)
54          puts("Yes");
55          else
56          puts("No");
57      }
58      return 0;
59 }

 

 

posted @ 2013-02-26 20:21  水门  阅读(185)  评论(0编辑  收藏  举报