UVA10305 Ordering Tasks

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA10305 Ordering Tasks相关的知识,希望对你有一定的参考价值。

一个很裸的拓扑排序题目,只是因为很久没有复习toposort,所以拿来复习一下,最近几天要把图论的经典算法都复习一遍。

#include  <iostream>
#include  <cstdio>
#include  <cstring>
#include  <cstdlib>
#include  <vector>
#include  <queue>
#include  <algorithm>
#include  <cmath>
using namespace std;
const int maxn=105;
bool G[maxn][maxn];
int n,m,t,c[maxn],topo[maxn];
bool dfs(int u)
{
	c[u]=-1;
	for(int v=1;v<=n;v++)
	{
		if(G[u][v])
		{
			if(c[v]<0)
				return false;
			else
			{
				if(!c[v]&&!dfs(v))
					return false;
			}
		}
	}
	c[u]=1;
	topo[t--]=u;
	return true;
}
void toposort()
{
	t=n;
	memset(c,0,sizeof(c));
	for(int u=1;u<=n;u++)
	{
		if(!c[u])
		{
			if(!dfs(u))
				return;
		}
	}
}
int main()
{
	while(scanf("%d%d",&n,&m))
	{
		memset(G,false,sizeof(G));
		if(n==0&&m==0)
			break;
		int u,v;
		for(int i=1;i<=m;i++)
		{
			scanf("%d%d",&u,&v);
			G[u][v]=true;
		}
		toposort();
		for(int i=1;i<=n-1;i++)
			printf("%d ",topo[i]);
		printf("%d\n",topo[n]);
	}
	return 0;
}

  

以上是关于UVA10305 Ordering Tasks的主要内容,如果未能解决你的问题,请参考以下文章

Uva 10305 Ordering Tasks(拓扑排序模版题)

UVA10305 Ordering Tasks

UVA - 10305 Ordering Tasks(拓扑排序)

UVA 10305 Ordering Tasks

UVA10305 Ordering Tasks

UVA 10305 Ordering Tasks(拓扑排序的队列解法)