zrq495
www.zrq495.com

判断顶点入度是否唯一即可。如果入度为0的节点只有一个,输出Yes,否则输出No。

代码:

 1 #include<iostream>
 2 #include<cstring>
 3 
 4 using namespace std;
 5 
 6 int len;
 7 int map[1001][1001];
 8 char name[1001][100];
 9 
10 int func(char str[])
11 {
12     int i;
13     for (i=0; i<len; i++)
14     {
15         if (strcmp(name[i], str)==0)
16             return i;
17     }
18     strcpy(name[len], str);
19     len++;
20     return i;
21 }
22 
23 int main()
24 {
25     int a, b;
26     int n, i;
27     int dgr[1001];
28     char s1[100], s2[100];
29     while(cin >> n, n)
30     {
31         memset(name, 0, sizeof(name));
32         memset(dgr, 0, sizeof(dgr));
33         memset(map, 0, sizeof(map));
34         int cnt=0;
35         len=0;
36         for (i=0; i<n; i++)
37         {
38             cin >> s1 >> s2;
39             a=func(s1);
40             b=func(s2);
41             if (map[a][b] == 0)    //重复不计
42             {
43                 map[a][b]=1;
44                 dgr[b]++;
45             }
46         }
47         for (i=0; i<len; i++)    //计数入度为0的节点的个数
48         {
49             if (dgr[i] == 0)
50                 cnt++;
51         }
52         if(cnt == 1)      //判断入度为是否0
53             cout << "Yes" << endl;
54         else
55             cout << "No" << endl;
56     }
57     return 0;
58 }
posted on 2012-08-02 18:41  zrq495  阅读(157)  评论(0编辑  收藏  举报