POJ1094-Sorting It All Out-拓扑排序

【题目大意】:
 
给出 A“<”B 的关系图
 
①在第i个关系之chu后,得出XXXX 
 
②在第i个关系之后 出现错误(环)
 
③全部关系之后仍然无法排序
 
【解题思路】:1.读一个数判断是否是②情况。
 
2.利用Floyd更新 任意两元素之间关系,当更新数达到(n*n-n)/2 之后,得到①情况。
 
3.数据全部读入之后,仍没有答案,得到③情况。
 1 #include "cstdio"
 2 #include "iostream"
 3 #include "cstring"
 4 using namespace std;
 5 int  E[30][30];
 6 int sum[30];
 7 void putout(int n)
 8 {
 9     int s;
10     for (int i = 1; i <= n; i++)
11     {
12         s = 1;
13         for (int j = 1; j <= n; j++)
14             if (E[i][j] && i != j) s++;
15         sum[s] = i;
16     }
17     for (int i = n; i >= 1 ; i--)
18     {
19         printf("%c", sum[i] + 'A' - 1);
20     }
21 
22 }
23 int main()
24 {
25     int n , m;
26     bool wait;
27     int ans = 0;
28     while (cin >> n >> m && (n + m))
29     {
30         memset(E, 0, sizeof(E));
31         char a, b;
32         wait = true;
33         ans = (n * n - n) / 2;
34         for (int i = 1; i <= m ; i++)
35         {
36             scanf(" %c"<"%c", &a, &b);
37 
38             if (wait)
39             {
40                 if (E[b - 'A' + 1][a - 'A' + 1] == 1 || (a - 'A' + 1) == (b - 'A' + 1))
41                 {
42                     wait = false;
43                     printf("Inconsistency found after %d relations.
", i);
44                     continue;
45                 }
46                 if (E[a - 'A' + 1][b - 'A' + 1] == 0)
47                 {
48                     E[a - 'A' + 1][b - 'A' + 1] = 1;
49                     ans--;
50                 }
51                 for (int k = 1 ; k <= n ; k++)
52                     for (int j = 1; j <= n; j++)
53                         for (int z = 1; z <= n; z++)
54                             if (E[j][z] == 0 && E[j][k] == 1 && E[k][z] == 1 && (j != z))
55                             {
56                                 ans--;
57                                 E[j][z] = 1;
58                             }
59                 if (!ans)
60                 {
61                     wait = false;
62                     printf("Sorted sequence determined after %d relations: ", i);
63                     putout(n);
64                     printf(".
");
65                     continue;
66                 }
67             }
68         }
69         if (wait) printf("Sorted sequence cannot be determined.
");
70     }
71 }
原文地址:https://www.cnblogs.com/HITLJR/p/5964857.html