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

HDU ACM 1285 确定比赛名次

时间:2015-03-15 23:02:43      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:c   编程   算法   acm   c++   

确定比赛名次,算很简单的拓扑排序了。领接矩阵表示。


#include<iostream>   
using namespace std;

int map[501][501];
int degree[501];

int main()  
{
	int i,j,k;
	int n,m,p1,p2;
	bool f;

	while(cin>>n>>m)
	{
		memset(map,0,sizeof(map));
		memset(degree,0,sizeof(degree));

		for(i=1;i<=m;i++)
		{
			cin>>p1>>p2;
			if(!map[p1][p2])    //判断重边,否则会出错
			{
				map[p1][p2]=1;
				degree[p2]++;
			}
		}

		f=0;         //拓扑排序
		for(i=1;i<=n;i++)    //进行n次处理以便处理完所有点
		{
			for(j=1;j<=n;j++) //找到度为0的点
			{
				if(degree[j]==0)
				{
					degree[j]--;   //对应度数递减,避免下次再处理
					if(f==0)
					{
						cout<<j;
						f=1;
					}
					else cout<<" "<<j;

					for(k=1;k<=n;k++) //去除和度数为0的点相连的边,即读书减一
				    	if(map[j][k]==1)
					    	degree[k]--;
					break;
				}
			}
		}
		cout<<endl;
	}
    return 0;  
}


HDU ACM 1285 确定比赛名次

标签:c   编程   算法   acm   c++   

原文地址:http://blog.csdn.net/a809146548/article/details/44282357

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!