图论--拓扑排序--模板
//字典序号最小
#include <cstdio>
#include <cstring>
#define MAXN 517
int G[MAXN][MAXN]; //路径
int in_degree[MAXN]; //入度
int ans[MAXN];
int n, m, x, y;
int i, j;bool toposort()
{for (i = 1; i <= n; i++) //从最小的开始寻找,{ //这样保证了有多个答案时序号小的先输出int k = 1;while (in_degree[k] != 0&&k<=n) //寻找入度为零的点k++;if(k==n+1) return 0;ans[i] = k;in_degree[k] = -1;//更新为-1,后边检测不受影响,相当于删除节点for (int j = 1; j <= n; j++){if (G[k][j])in_degree[j]--; //相关联的入度减1}}return 1;
}void init()
{memset(in_degree, 0, sizeof(in_degree));memset(ans, 0, sizeof(ans));memset(G, 0, sizeof(G));
}int main()
{while (~scanf("%d%d", &n, &m)){init();for (i = 0; i < m; i++){scanf("%d%d", &x, &y);if(G[x][y]==0) in_degree[y]++;G[x][y] = 1;}toposort();for (i = 1; i < n; i++)printf("%d ", ans[i]);printf("%d\n", ans[n]);}return 0;
}
//字典序最小2
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int maxn=500+10;
int n,m;
vector<int> G[maxn];
int in[maxn];
void topo()
{priority_queue<int,vector<int>,greater<int> > Q; //保证小值int先出队列int ans[maxn],cnt=0;for(int i=1;i<=n;i++)if(in[i]==0) Q.push(i);while(!Q.empty()){int u=Q.top(); Q.pop();ans[cnt++]=u;for(int i=0;i<G[u].size();i++){int v=G[u][i];if(--in[v]==0)Q.push(v);}}printf("%d",ans[0]);for(int i=1;i<n;i++)printf(" %d",ans[i]);puts("");
}
int main()
{while(scanf("%d%d",&n,&m)==2){memset(in,0,sizeof(in));for(int i=1;i<=n;i++) G[i].clear();for(int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);G[u].push_back(v);in[v]++;}topo();}return 0;
}
//一般的拓扑排序
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int maxn=500+10;
int n,m;
vector<int> G[maxn];
int in[maxn];
void topo()
{priority_queue<int,vector<int>,greater<int> > Q; //保证小值int先出队列int ans[maxn],cnt=0;for(int i=1;i<=n;i++)if(in[i]==0) Q.push(i);while(!Q.empty()){int u=Q.top(); Q.pop();ans[cnt++]=u;for(int i=0;i<G[u].size();i++){int v=G[u][i];if(--in[v]==0)Q.push(v);}}printf("%d",ans[0]);for(int i=1;i<n;i++)printf(" %d",ans[i]);puts("");
}
int main()
{while(scanf("%d%d",&n,&m)==2){memset(in,0,sizeof(in));for(int i=1;i<=n;i++) G[i].clear();for(int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);G[u].push_back(v);in[v]++;}topo();}return 0;
}
图论--拓扑排序--模板相关推荐
- 数据结构-图论-拓扑排序模板题(hdu3342)(poj1270)(hdu4857)
dfs与bfs的很直接的应用就是拓扑排序. 拓扑排序如果用数组来模拟链表进行操作,既解决了稀疏图的空间问题,又解决了用链表进行操作麻烦的问题 但是拓扑排序并不是数字大小之间的排序,而是某些事情之间的顺 ...
- 最短工期 (25 分)【拓扑排序模板】
立志用最少的代码做最高效的表达 一个项目由若干个任务组成,任务之间有先后依赖顺序.项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务.现给定一个项目中各个任务之间的关 ...
- Kahn拓扑排序模板
Kahn拓扑排序模板 O(V+E) #include<bits/stdc++.h> using namespace std;typedef long long ll; const int ...
- 拓扑排序模板(Kahn算法和DFS实现)
拓扑排序思想: Kahn模板:每次取出入度为0的顶点删掉,并删掉和该点有关的边,需要维护一个入度为0的队列或者栈 //Kahn算法,关键在于需要维护一个入度为0的顶点的集合 int n,m; int ...
- 图论---拓扑排序的应用
最近研究了几道图论的题目,都是图论入门的算法,用的比较多的就是拓扑排序,多用于有着先后顺序的题目,也可以用来判断环,做个小总结. 杂物 题目链接:杂务 - 洛谷 这一题需要计算最短的时间,利用了记忆化 ...
- 图论--拓扑排序--HDU-1285确定比赛名次
Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...
- 图论--拓扑排序--判断是否为DAG图
#include<cstdio> #include<cstring> #include<vector> #include<queue> using na ...
- 图论--拓扑排序--判断一个图能否被拓扑排序
拓扑排序的实现条件,以及结合应用场景,我们都能得到拓扑排序适用于DAG图(Directed Acyclic Graph简称DAG)有向无环图, 根据关系我们能得到一个线性序列,实现的方式是DFS,具体 ...
- AcWing 848. 有向图的拓扑序列(拓扑排序模板)
题面链接 https://www.acwing.com/problem/content/850/ 思路 对于一个有向图来说,只有无环有向图才有拓扑序列,也可以说一个无环有向图必然有拓扑序列,但是不唯一 ...
最新文章
- Oracle 常用查询
- Fiddler 抓包高级进阶篇-天罗地网抓包大法
- Cannot find reference ‘PDFDocument‘ in ‘pdfparser.py‘
- 让理科生沉默,让文科生落泪的文史综合题
- 公钥和私钥怎么生成_科普 | Eth2 验证者如何生成和保护取款密钥
- iOS内存暴增问题追查与使用陷阱
- Discuz修改笔记-Discuz代码的使用
- 直接在安装了redis的Linux机器上操作redis数据存储类型--List类型
- IDEA-Maven的Dependencies中出现红色波浪线
- USACO 2.3 Controlling Companies(DFS)
- 顶级SaaS公司的共同基因都有什么?
- ROS系统学习8---节点间的内存共享(初级篇)
- word内容被锁定无法进行修改的解决办法
- JavaSE基础20笔记IO流
- DevOps 在公司项目中的实践落地
- 高等数学 —— 数列的极限
- 曙光服务器面板显示感叹号,磁盘阵列和磁带库面板感叹号灯橙色
- 法国电影《蝴蝶》Le Papillon主题曲
- 关于最新版mumu模拟器(2.2.16)安装xposed框架
- eclipselink 数据库表命名规则 驼峰转下划线/表名转换
热门文章
- 洛谷 P3853 [TJOI2007]路标设置
- HTML学习笔记05-文本格式化
- 【JAVA基础】四舍五入之7中舍入法
- RabbitMQ 安装操作
- 用开源项目PhotoView实现图片的双指缩放和双击放大缩小
- javascript数组中数字和非数字下标的区别
- Windows-Qt-EclipseCDT 环境问题集
- 被绞杀的网景:互联网门口第一滴血,互联网营销
- 曲靖沾益区计算机学校,【曲靖市沾益区职业技术学校-网址】2021招生简介|怎么样...
- php getid3,PHP getID3类的使用方法学习笔记【附getID3源码下载】