首页 > 其他 > 详细

hdoj 1085 确定比赛名次 【拓扑排序】

时间:2014-08-07 13:22:01      阅读:372      评论:0      收藏:0      [点我收藏+]

中文题,不解释。

这是我的第一道拓扑排序题,先来讲一下什么是拓扑排序:

拓扑排序其实就是如果要进行某一项活动的时候,它的基础活动要先进行。比如说,学概率论之前必须要学会高等数学,那么高等数学就是学概率论的前提条件,这就牵涉到先后课程怎么学习,就是谁先学谁后学习, 拓扑排序就是解决这类问题的。

题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1285

代码:

#include<stdio.h>
#include<string.h>
bool map[507][507];
int in[507];//模拟队列
int main()
{
	int n, m, a, b, i;
	while(scanf("%d%d", &n, &m) == 2){
		memset(map, 0, sizeof(map));
		memset(in, 0, sizeof(in));
		while(m --){
			scanf("%d%d", &a, &b);
			if(!map[a][b]){
				map[a][b] = 1;
				in[b]++;
			}
		}
		int top, t;
		for(i = n; i > 0; i --){ //这个不能从1开始,题目要求是输出顺序最小的序列
			if(!in[i]){
				top = i;
			}
		}
		t = 1;
		while(t < n){
			printf("%d ", top);
			in[top] --;
			t++;
			for(i = 1; i <= n; i ++){
				if(map[top][i]){
					in[i]--;
				}
			}
			for(i = n; i > 0; i --){//这里也是
				if(!in[i]){
					top = i;
				}
			}
		}
		printf("%d\n", top);
	}
	return 0;
}


hdoj 1085 确定比赛名次 【拓扑排序】,布布扣,bubuko.com

hdoj 1085 确定比赛名次 【拓扑排序】

原文:http://blog.csdn.net/shengweisong/article/details/38408249

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