determined or an inconsistency is found, whichever comes first, and yyy...y is the sorted, ascending sequence.
Sample Input
4 6 ASample Output
Sorted sequence determined after 4 relations: ABCD. Inconsistency found after 2 relations. Sorted sequence cannot be determined.
#include
int pos; int next; }edge[405];
int cur, neigh[26], n, m, indegree[26], queue[28], front, rear, seq[26]; int toposort() {
int indeg[26]; bool res = false; front = rear = 0;
for (int i = 0; i < n; ++i) { indeg[i] = indegree[i];
if (indeg[i] == 0) queue[rear++] = i; }
int k = 0;
while (front != rear) {
if (front + 1 < rear) res = true; int tmp = queue[front++]; seq[k++] = tmp; int e = neigh[tmp]; while (e != -1) {
--indeg[edge[e].pos];
if (indeg[edge[e].pos] == 0) queue[rear++] = edge[e].pos; e = edge[e].next; }
}
if (k < n) return -1; if (res) return 0; return 1; }
int main() {
char str[5];
int beg, end, err, ans; while (cin >> n >> m) { if (!n && !m) break;
for (int i = 0; i < n; ++i) { indegree[i] = 0; neigh[i] = -1; }
cur = 0;
err = ans = -1;
for (int i = 0; i < m; ++i) { cin >> str;
if (err != -1 || ans != -1) continue; beg = str[0] - 'A'; end = str[2] - 'A'; edge[cur].pos = end;
edge[cur].next = neigh[beg]; neigh[beg] = cur; ++cur;
++indegree[end];
int res = toposort();
if (res == 1) ans = i + 1;
else if (res == -1) err = i + 1; }
if (ans != -1) {
cout << \ for (int i = 0; i < n; ++i) putchar('A' + seq[i]); cout << \ }
else if (err != -1)
cout << \ else
cout << \ }
return 0; }
要求:
1、上述作业要求在单独完成;
2、完成后,于规定期限内提交到教学辅助系统中,注意,在提交时将所编写的程序统一拷贝到一个Word文件中。