数据结构与算法6 - 图文(5)

2020-05-07 09:12

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 #include #include using namespace std; struct Edge {

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文件中。


数据结构与算法6 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: