Uva Oj 10305 - Ordering Tasks

图的基本算法

遍历每个顶点,有顺序,递归处理,每次找到前面没点的点输出

比较和谐,不用判断有没有环

其实...

floyd一下也就知道有没有环了

2Y

#include<stdio.h>
int ok[110]; 
int graph[110][110];
int m,n;
int first=1;
void FS(){
	int sum[110],i,j;
	for(i=1;i<=n;i++){
		sum[i]=0;
		for(j=1;j<=n;j++){
			if(ok[j])continue;
			sum[i]+=graph[j][i];
			}
	//	printf("%d ",sum[i]);
		}//printf("\n");
	int check=0;
	for(i=1;i<=n;i++){
		check+=ok[i];
		if(!ok[i]&&sum[i]==0){
			ok[i]=1;
			if(first)first=0;
			else printf(" ");
			printf("%d",i);
			}
		}
	if(check!=n)FS();
	}
int main(){
	while(scanf("%d%d",&n,&m)!=EOF){
		if(m==0&&n==0)break;
		first=1;
		int i,j;
		for(i=1;i<=n;i++)for(j=1;j<=n;j++)graph[i][j]=0;
		for(i=1;i<=n;i++)ok[i]=0;
		for(i=1;i<=m;i++){
			int x,y;
			scanf("%d%d",&x,&y);		//x在y前 
			graph[x][y]=1;
			}
	/*	for(i=1;i<=n;i++){
			for(j=1;j<=n;j++)printf("%d ",graph[i][j]);
			printf("\n");
			}printf("\n");*/
		FS();
		printf("\n");
		}
	return 0;
	}

测试数据

2 1

2 1

0 0

ac out

2 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值