确定比赛名次(拓扑排序)
来源:互联网 发布:外汇软件 编辑:程序博客网 时间:2024/06/15 02:17
题目大概:
输入有多个数据,输入n,m,接下来有n个队伍参加了m场比赛,接下来m行每行两个数p1,p2,是p1赢了p2,p1要排在p2前面,输出排名(不唯一)。
思路:
因为这个题中是无环有向图,所有可以用拓扑排序。
拓扑排序可以定义一个map来记录那两个队有比赛谁赢了,map【a】【b】=1;代表a赢了b。
还可以有入度记录r【】,记录入度个数。
出度个数c【】。
所有数据存入后,每次输出入度为0的队伍,然后把它与其他队伍的联系解除。
不断循环就可以了。
感想:
自己学一个算法就是比较麻烦,看了白皮书,还不够,还需要从网上学习。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int INF=505;int map[INF][INF];int r[INF];int c[INF];int main(){ int n,m; while(cin>>n>>m) { memset(map,0,sizeof(map)); memset(r,0,sizeof(r)); memset(c,0,sizeof(c)); int fr,to; for(int i=1;i<=m;i++) { cin>>fr>>to; if(map[fr][to]==0) { map[fr][to]=1; c[fr]++; r[to]++; } } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(r[j]==0) { r[j]--; if(i!=n) cout<<j<<" "; else cout<<j<<endl; for(int k=1;k<=n;k++) { if(map[j][k])r[k]--; } break; } } } return 0;}
阅读全文
0 0
- hdu 确定比赛名次(拓扑排序)
- 确定比赛名次(拓扑排序)
- HDOJ1285 确定比赛名次(拓扑排序)
- 确定比赛名次 (拓扑排序)
- hdu1285 确定比赛名次(拓扑排序)
- 确定比赛名次(拓扑排序)
- 确定比赛名次(拓扑排序)
- 确定比赛名次 (拓扑排序)
- 确定比赛名次(拓扑排序)
- HDOJ 确定比赛名次 (拓扑排序)
- HDU1285确定比赛名次(拓扑排序)
- hdu 确定比赛名次(拓扑排序)
- 确定比赛名次(拓扑排序)
- hdu1285 确定比赛名次(拓扑排序)
- HDU1285确定比赛名次(拓扑排序)
- hdu1285 确定比赛名次(拓扑排序)
- 确定比赛名次(拓扑排序)
- 确定比赛名次 (拓扑排序)
- FCC-----------Design a danmu app
- NPOI导出Excel2007-xlsx格式文件,用于web时需要注意的问题-XSSFWorkbook处理问题
- SQL Server 2012 SEQUENCE 使用
- HTML学习3
- 创建型:单例模式(singleton)
- 确定比赛名次(拓扑排序)
- 软件编写规范(可读性)
- hdu2675
- Java RMI详解
- thread join和detach
- js事件
- 二进制里的青春与爱
- 对象和变量,函数
- js事件2