首页 > 其他 > 详细

UVa10305 - Ordering Tasks

时间:2014-03-24 23:56:25      阅读:607      评论:0      收藏:0      [点我收藏+]

题目地址:点击打开链接

拓扑排序

#include <iostream>
#include <deque>
#include <cstring>
#include <vector>
using namespace std;
const int maxsize = 110;
int graph[maxsize][maxsize];
int inDegree[maxsize];
int main()
{
	int n,m;
	while(cin>>n>>m&&(n||m))
	{
		memset(graph,0,sizeof(graph));
		memset(inDegree,0,sizeof(inDegree));
		int i;
		for(i=0;i<m;++i)
		{
			int a,b;
			cin>>a>>b;
			graph[a][b]=1;
			++inDegree[b];
		}
		deque<int> di;
		for(i=1;i<=n;++i)
		{
			if(inDegree[i]==0)
				di.push_back(i);
		}
		vector<int> p;
		while(!di.empty())
		{
			int x=di.front();
			di.pop_front();
			p.push_back(x);
			for(i=1;i<=n;++i)
			{
				if(graph[x][i]!=0)
				{
					graph[x][i]=0;
					if(--inDegree[i]==0)
						di.push_back(i);
				}
			}
		}
		for(i=0;i<p.size()-1;++i)
			cout<<p[i]<<" ";
		cout<<p[i]<<endl;
	}
	return 0;
}


UVa10305 - Ordering Tasks,布布扣,bubuko.com

UVa10305 - Ordering Tasks

原文:http://blog.csdn.net/leizh007/article/details/21991603

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!