码迷,mamicode.com
首页 > 其他好文 > 详细

拓扑排序

时间:2014-07-09 13:33:27      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:blog   os   for   io   代码   div   

之前很傻,,感觉看不到拓扑是啥东西。。脑子太烂了吧。。。今晚上瞄了一眼就懂了。。

我就放代码上来就行了。。注释也不打了,,因为太简单了。

#include <iostream>
#include <cstring>
using namespace std;
#define CC(i) memset(i, 0, sizeof(i))

const int maxn=105;

int g[maxn][maxn], n, m, vis[maxn], top[maxn], cnt;

bool dfs(int u) {
	vis[u]=-1;
	for(int v=1; v<=n; ++v) if(g[u][v]) {
		if(vis[v]==-1) return false;
		else if(!vis[v] && !dfs(v)) return false;
	}
	vis[u]=1; top[cnt--]=u;
	return true;
}

bool toposort() {
	CC(vis); CC(top); cnt=n;
	for(int i=1; i<=n; ++i) if(!vis[i] && !dfs(i)) return false;
	return true;
}

int main() {
	int u, v;
	cin >> n >> m;
	for(int i=1; i<=m; ++i) {
		cin >> u >> v;
		g[u][v]=1;
	}
	
	if(toposort()) {
		cout << "Yes\n";
		int i;
		for(i=1; i<n; ++i) cout << top[i] << " < ";
		cout << top[i] << endl;
	}
	else cout << "No\n";
	
	return 0;
}

 

拓扑排序,布布扣,bubuko.com

拓扑排序

标签:blog   os   for   io   代码   div   

原文地址:http://www.cnblogs.com/iwtwiioi/p/3832604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!