码迷,mamicode.com
首页 > 其他好文 > 详细

topSort

时间:2015-08-11 14:02:38      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

Sorting It All Out(poj1094)
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 30187   Accepted: 10442

Description

An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequence A, B, C, D implies that A < B, B < C and C < D. in this problem, we will give you a set of relations of the form A < B and ask you to determine whether a sorted order has been specified or not.

Input

Input consists of multiple problem instances. Each instance starts with a line containing two positive integers n and m. the first value indicated the number of objects to sort, where 2 <= n <= 26. The objects to be sorted will be the first n characters of the uppercase alphabet. The second value m indicates the number of relations of the form A < B which will be given in this problem instance. Next will be m lines, each containing one such relation consisting of three characters: an uppercase letter, the character "<" and a second uppercase letter. No letter will be outside the range of the first n letters of the alphabet. Values of n = m = 0 indicate end of input.

Output

For each problem instance, output consists of one line. This line should be one of the following three:
Sorted sequence determined after xxx relations: yyy...y. Sorted sequence cannot be determined. Inconsistency found after xxx relations.
where xxx is the number of relations processed at the time either a sorted sequence is determined or an inconsistency is found, whichever comes first, and yyy...y is the sorted, ascending sequence.

Sample Input

4 6
A<B
A<C
B<C
C<D
B<D
A<B
3 2
A<B
B<A
26 1
A<Z
0 0

Sample Output

Sorted sequence determined after 4 relations: ABCD.
Inconsistency found after 2 relations.
Sorted sequence cannot be determined.

题意:

三种情况:  1. 在第x个关系中可以唯一的确定排序,并输出。  

                2. 在第x个关系中发现了有回环(Inconsisitency矛盾)  

                3.全部关系都没有发现上面两种情况,输出第3种.  

要求对于给定的m个关系,一个个的读进去,每读进去一次就要进行一次拓扑排序,如果发现情况1和情况2,那么就不用再考虑后面的那些关系了,但是还要继续读完后面的关系(但不处理)。如果读完了所有关系,还没有出现情况1和情况2,那么就输出情况3.

技术分享
 1 #include <iostream>
 2 #include <cstring>
 3 #include <string>
 4 #include <fstream>
 5 using namespace std;
 6 
 7 int grap[27][27];
 8 int indeg[26],temp[26];
 9 int n,m;
10 char seq[26];
11 
12 int topSort()
13 {
14     int flag = 1;
15     memcpy(temp,indeg,sizeof(indeg));
16     memset(seq, \0,sizeof(seq));
17     for(int i = 0; i < n; i++)
18     {
19         int times = 0,loc;
20         for(int j = 0; j < n; j++)
21         {
22             if(temp[j] == 0)
23             {
24                 times++;
25                 loc = j;
26             }
27         }
28         if(times > 1) flag = -1;
29         if(times == 0) return 0;
30         temp[loc]--;
31         seq[i] = A+ loc;
32         for(int k = 0; k < n; k++)
33         {
34             if(grap[loc][k])
35             {
36                 temp[k]--;
37             }
38         }
39     }
40     return flag;
41 }
42 
43 int main()
44 {
45     while(cin >> n >> m)
46     {
47         if(n == 0 && m == 0)
48             break;
49             
50         memset(grap,0,sizeof(grap));
51         memset(indeg,0,sizeof(indeg));
52         bool ok = false;
53 
54         for(int i = 0; i < m; i++)
55         {
56             string ss;
57             cin >> ss;
58             if(ok) continue;
59             int row,col;
60             row = ss[0] - 65;
61             col = ss[2] - 65;
62             if(grap[row][col] == 0)
63             {
64                 grap[row][col] = 1;
65                 indeg[col]++;
66             }
67 
68             int flag = topSort();
69             if(flag==1)
70             {
71                 ok = true;
72                 cout << "Sorted sequence determined after " << i+1 << " relations: " << seq << "."<<endl;
73             }
74             else if(flag==0)
75             {
76                 ok = true;
77                 cout << "Inconsistency found after " << i+1 << " relations." << endl;
78             }
79         }
80         
81         if(!ok)
82         {
83             cout << "Sorted sequence cannot be determined." << endl;
84         }
85     }
86 
87     return 0;
88 }
View Code

 

topSort

标签:

原文地址:http://www.cnblogs.com/cjshuang/p/4720615.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!