码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-08-07 13:22:01      阅读:203      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!