HDU-1285简单的拓扑排序
来源:互联网 发布:sql server 无法连接 编辑:程序博客网 时间:2024/06/13 18:13
拓扑排序简单来说就是把一个图的所有节点排序,使得每一条有向边(u,v)对应的u都排在v的前面。1、拓扑排序在有向无环图中才能排出有效的序列,否则能判断该有向图有环。 2、如果输入的有向图中的点,不存在入度为0的点,则该有向图存在回路 3、如果存在的入度为0的点大于一个,则该有向图肯定不存在一个可以确定的拓扑序列但并不妨碍拓扑排序
#include<iostream>#include<cstring>using namespace std;int map[501][501],into[501],ans[501];int n;void topu(){ int i,j,k; for(i=1; i<=n; i++) for(j=1; j<=n; j++) { if(map[i][j]) into[j]++;//记录每个点的入度 } for(i=1; i<=n; i++) { k=1;//每次从第一个节点开始查找入度为0的点 while(into[k]!=0)k++;//找到入度为0的点,因为题目说明必有排名,所以必存在入度0 ans[i]=k;//记录答案 into[k]--;//将其抛弃,入度变为-1 for(j=1; j<=n; j++) { if(map[k][j]) into[j]--;//与k有关的入度都-1 } }}int main(){ int m,a,b,i; while(cin>>n>>m) { memset(map,0,sizeof(map)); memset(into,0,sizeof(into)); while(m--) { cin>>a>>b; map[a][b]=1; } topu(); for( i=1; i<=n; i++) { cout<<ans[i]; if(i!=n)cout<<" ";//注意最后一个不要输出空格 } cout<<endl; }}
- HDU-1285简单的拓扑排序
- hdu 1285 确定比赛名次 (简单的拓扑排序)
- hdu 1285 确定比赛名次 简单的拓扑排序
- 确定比赛名次,hdu 1285 最简单的拓扑排序,
- hdu 1285 拓扑排序(简单)
- 简单的拓扑排序
- [HDU-1285] 拓扑排序
- hdu 1285拓扑排序
- hdu 1285 拓扑排序
- HDU 1285 拓扑排序
- hdu 1285 拓扑排序
- HDU 1285 拓扑排序
- hdu 1285 拓扑排序
- hdu 1285(拓扑排序)
- hdu 1285(拓扑排序)
- hdu 1285 拓扑排序
- hdu 1285 拓扑排序
- HDU 1285 拓扑排序
- MySQL 触发器简单实例
- H.264帧内编码的模式选择
- VBD T38 T30传真的区别
- MySQL数据库相关
- linux命令 .
- HDU-1285简单的拓扑排序
- Android 颜色渲染(九) PorterDuff及Xfermode详解
- 深入挖掘IDR_MAINFRAME
- javacript里的内存模型
- 你应该更新的Java知识之常用程序库(二)
- TextView在光标处插入文字
- 你应该更新的Java知识之构建工具
- android 单元测试
- python 类型判断