拓扑排序(模板)
来源:互联网 发布:centos 7 ftp服务器 编辑:程序博客网 时间:2024/05/17 23:12
第一种模板(使用dfs)
int n, G[maxn][maxn], c[maxn], topo[maxn], t;/* *n表示邻接表的个数, *c[]表示状态,为1表示访问过,为0表示未访问,为-1表示正在访问 *topo表示排完序的拓扑序列 */ bool dfs(int u){c[u] = -1;for(int v = 0; v < n; v++) if(G[u][v]) {if(c[v]<0) return false;else if(!c[v]) dfs(v);}c[u] = 1; topo[--t]=u;return true;}bool toposort(){t = n;memset(c, 0, sizeof(c));for(int u = 0; u < n; u++) if(!c[u])if(!dfs(u)) return false;return true;}
第二种模板(利用出度的想法,入度为0表示第一个放出图的点,同时所有和改点相连的点的入度减一)
int G[MAXN][MAXN];//路径int in_degree[MAXN];//入度int ans[MAXN];//路径 int n;//顶点 void toposort(){for(i = 1; i <= n; i++){for(j = 1; j <= n; j++){if(G[i][j]){in_degree[j]++;}}}for(i = 1; i <= n; i++)//从最小的开始寻找,{//这样保证了有多个答案时序号小的先输出int k = 1;while(in_degree[k] != 0)//寻找入度为零的点k++;ans[i] = k;in_degree[k] = -1;//更新为-1,后边检测不受影响,相当于删除节点for(int j = 1; j <= n; j++){if(G[k][j])in_degree[j]--;//相关联的入度减1}}}
阅读全文
0 0
- 拓扑排序(模板)
- HDU1285(拓扑排序(模板))
- 拓扑排序模板(备忘之用)
- HDU 1285 (拓扑排序模板)
- HDU 1285 (拓扑排序模板)
- 拓扑排序的模板
- 拓扑排序及模板
- 拓扑排序模板
- 拓扑排序模板
- 拓扑排序模板
- 拓扑排序-模板
- 拓扑排序toposort 模板
- 拓扑排序模板
- 拓扑排序模板
- 拓扑排序算法模板
- 拓扑排序【模板】
- 拓扑排序模板
- 拓扑排序模板
- 购物车加减商品后台
- jstack学习 shell代码调试 set -x
- QT5.4.0实现QLabel滚动显示
- cookie和session
- 【POJ】1064
- 拓扑排序(模板)
- Java JDK 动态代理使用及实现原理分析
- 关于sklearn.svm.SVC与.NuSVC的区别以及参数介绍
- 读《Head First设计模式》
- Data Binding Library(Data Binding库官方指南)
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别
- viewpage轮播
- 动态规划问题探究及其Java实现
- 摄像机坐标系