九度题目1449:确定比赛名次

简介:
题目1449:确定比赛名次
时间限制:1 秒内存限制:128 兆特殊判题:否提交:669解决:293
题目描述:
有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。
输入:
输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。
输出:
给出一个符合要求的排名。输出时队伍号之间有空格,最后一名后面没有空格。
其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
样例输入:
4 3
1 2
2 3
4 3
样例输出:
1 2 4 3








//拓扑排序
/*拓扑排序方法如下:
(1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它.
(2)从网中删去该顶点,并且删去从该顶点发出的全部有向边.

(3)重复上述两步,直到剩余的网中不再存在没有前趋的顶点为止.*/

AC代码:

#include<stdio.h>
#include<string.h>
int degree[510],bin[510],map[510][510];
void ToPu(int n)
{
   int i,j,p;
   for(i=1;i<=n;i++)
   {
      p=-1;//用来记录入度为0的结点 
      for(j=1;j<=n;j++)
      {
         if(degree[j]==0)//如果入度为0 
         {
           degree[j]--;//让他为负数
           bin[i]=p=j;
           break;//找到那个入度为0的结点,说明他是本组查找的元老 
         } 
      }
      for(j=1;j<=n;j++)
      {
        if(map[p][j]==1)//去掉p链接的所有路 
        {
           map[p][j]=0;
           degree[j]--;//j的入度减去1 
        } 
      }
   }    
}
int main()
{
    int i,j,n,m,x,y;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
       memset(degree,0,sizeof(degree));
       memset(bin,0,sizeof(bin));
       memset(map,0,sizeof(map));
       for(i=0;i<m;i++)    
       {
           scanf("%d %d",&x,&y);
           if(map[x][y]==0)  
           {
              map[x][y]=1;
              degree[y]++;//y点的入度加一 
           }              
       } 
       ToPu(n);   
       printf("%d",bin[1]);
       for(i=2;i<=n;i++)
       printf(" %d",bin[i]);
       puts("");     
    }
    return 0;
}
相关文章
|
6月前
leetcode-506:相对名次
leetcode-506:相对名次
61 0
|
5月前
OJ刷题:猜名次和找凶手
OJ刷题:猜名次和找凶手
21 0
|
6月前
|
存储
【错题集-编程题】组队竞赛(排序 + 贪心)
【错题集-编程题】组队竞赛(排序 + 贪心)
|
6月前
leetcode:506. 相对名次
leetcode:506. 相对名次
39 0
|
测试技术 C语言
题目 2572: 蓝桥杯2020年第十一届省赛真题-子串分值
题目 2572: 蓝桥杯2020年第十一届省赛真题-子串分值
|
Java C语言 C++
【蓝桥杯基础题】2020年省赛填空题—既约分数
【蓝桥杯基础题】2020年省赛填空题—既约分数
【蓝桥杯基础题】2020年省赛填空题—既约分数
刷题:运动员猜名次,从能解决到完美解决的代码进阶
刷题:运动员猜名次,从能解决到完美解决的代码进阶
61 0
HDU - 1285: 确定比赛名次
HDU - 1285: 确定比赛名次
87 0
|
存储 安全 算法
80分钟100分,83行代码决赛优秀选手如何解题?
由阿里云云效主办的2021年第3届83行代码挑战赛已经收官。超2万人围观,近4000人参赛,85个团队组团来战。大赛采用游戏闯关玩儿法,融合元宇宙科幻和剧本杀元素,让一众开发者玩得不亦乐乎。
410 0
80分钟100分,83行代码决赛优秀选手如何解题?