例题6-15 给任务排序(Ordering Tasks, UVa 10305)
发布日期:2021-05-06 16:10:07 浏览次数:16 分类:原创文章

本文共 833 字,大约阅读时间需要 2 分钟。

原题链接:
分类:图
备注:拓扑排序

第一次见识拓扑排序,稍微看看资料,直接写出来就过了…有点懵逼
方向为大的指向小的,直接从无入度的点进行dfs,逆序输出就ok了。

代码如下:

#include<cstdio>#include<vector>#include<cstring>#include<set>using namespace std;const int maxn = 100 + 5;int vised[maxn], in[maxn];set<int>out[maxn];vector<int>ans;void dfs(int x) {   	vised[x] = 1;	for (set<int>::iterator it = out[x].begin(); it != out[x].end(); ++it) 		if (!vised[*it])dfs(*it);	ans.push_back(x);}int main(void) {   	int n, m, u, v;	while (~scanf("%d%d", &n, &m) && n) {   		memset(vised, 0, sizeof(vised));		memset(in, 0, sizeof(in));		for (int i = 1; i <= n; i++)			out[i].clear();		ans.clear();		while (m--) {   			scanf("%d %d", &u, &v);			out[v].insert(u);			in[u]++;		}		for (int i = 1; i <= n; i++) 			if (!in[i]) dfs(i);		for (int i = 0; i < n; i++) 			printf("%d%c", ans[i], i == n - 1 ? '\n' : ' ');	}	return 0;}
上一篇:例题6-17 看图写树(Undraw the Trees, UVa 10562)
下一篇:例题7-3 分数拆分(Fractions Again?!, UVa 10976)

发表评论

最新留言

不错!
[***.144.177.141]2025年03月16日 23时41分35秒