`
Jianquan
  • 浏览: 18887 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Uva 10305 Ordering Tasks

    博客分类:
  • UVa
阅读更多

题目:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=105&page=show_problem&problem=1246
拓扑排序,直接dfs,具体看刘汝佳的《算法竞赛入门经典》。而且这道题目的题意是一定存在拓扑排序,所以更加简单。

#include<stdio.h>
#include<string.h>
#define MAXN 100+10

int vis[MAXN],edge[MAXN][MAXN],topo[MAXN],t,n;

void dfs(int i)
{
	int j;
	for(j=1;j<=n;j++)
		if(edge[i][j]&&!vis[j])
		{
			vis[j]=1;
			dfs(j);
		}
	topo[t--]=i;
}
int main()
{
	int i,m;
	for(;;)
	{
		scanf("%d%d",&n,&m);
		if(n==0&&m==0) break;
		memset(vis,0,sizeof(vis));
		memset(edge,0,sizeof(edge));
		while(m--)
		{
			int a,b;
			scanf("%d%d",&a,&b);
			edge[a][b]=1;
		}
		t=n;
		for(i=1;i<=n;i++)
			if(!vis[i])
			{
				vis[i]=1;
				dfs(i);
			}
		for(i=1;i<=n;i++)
		{
			printf("%d",topo[i]);
			if(i==n) putchar('\n');
			else putchar(' ');
		}
	}
	return 0;
}
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics