Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 25689 | Accepted: 8917 |
Description
Input
Output
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.
Source
#include<stdio.h> #include<string.h> using namespace std; int adj[28][28]={0}; char sortRes[28]={‘\0‘}; int m,n; int toposort() { int i,j,k,flg = 1, res = 1; int inDegrees[28] = {0}; memset(sortRes, ‘\0‘, sizeof(sortRes)); for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) if (adj[i][j]) ++inDegrees[j]; for (i = 0; i < n; ++i) { k = -1; for (j = 0; j < n; ++j) if (inDegrees[j] == 0) { if (k == -1) k = j; else flg = 0; } if (k == -1) return 0; //There is a circle else if (flg == 0) res = -1; //Multiple 0 for (j = 0; j < n; ++j) if (adj[k][j]) --inDegrees[j]; inDegrees[k] = -1; sortRes[i] = ‘A‘ + k; } return res; } int main() { char s[10]; //freopen("test.txt","r",stdin); while (scanf("%d%d",&n,&m) != EOF && n != 0) { memset(adj, 0, sizeof(adj)); int h = -2, flg = 0; for (int i = 0; i < m; ++i) { scanf("%s",s); if (flg == 0) { adj[s[0]-‘A‘][s[2]-‘A‘] = 1; h = toposort(); if (h == 0 || h == 1) flg = i + 1; } } if (h == 1) printf("Sorted sequence determined after %d relations: %s.\n",flg,sortRes); else if (h == 0) printf("Inconsistency found after %d relations.\n", flg); else if (h == -1) printf("Sorted sequence cannot be determined.\n"); } return 0; }
for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) if (adj[i][j]) ++inDegrees[j]; //1. GET all in degrees for (i = 0; i < n; ++i) { k = -1; for (j = 0; j < n; ++j) if (inDegrees[j] == 0) { //2. Pick out the node with 0 in degree if (k == -1) k = j; else flg = 0; } // 3. The concepts of circle:3->1->2 && 3->4->2 is not a circle.Judge whether there‘s a circle or multiple 0s if (k == -1) return 0; //There is a circle else if (flg == 0) res = -1; //Multiple 0 for (j = 0; j < n; ++j) //prepare for the next loop if (adj[k][j]) --inDegrees[j]; inDegrees[k] = -1; sortRes[i] = ‘A‘ + k; }
poj 1094 Sorting It All Out topological sorting,布布扣,bubuko.com
poj 1094 Sorting It All Out topological sorting
原文:http://blog.csdn.net/taoqick/article/details/20479549