本文主要是介绍Ordering Tasks (拓扑排序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:给你一个n表示有n个任务,有m次操作
每次有一个a,b,表示a任务必须放在b任务之前完成;
问你任务该怎么安排?
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int mp[105][105];
int vis[105];int main()
{int n, m;while (cin >> n >> m){int x, y;memset(mp, 0, sizeof(mp));memset(vis, 0, sizeof(vis));for (int i = 0; i < m; i++){cin >> x >> y;if (!mp[x][y]){mp[x][y] = 1;vis[y]++;//表示第y个任务之前有多少个任务未完成}}for (int i = 1; i <= n; i++)//输出n次{for (int j = 1; j <= n; j++)//判断第j个元素能否输出{if (vis[j] == 0){vis[j]--;if (i != n){cout << j << ' ';}else{cout << j;}for (int k = 1; k <= n; k++){if (mp[j][k]==1){vis[k]--;}}break;}}}cout << endl;}return 0;
}
这篇关于Ordering Tasks (拓扑排序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!