Kahn版 TopologicalSort:

const int NUM = 10;
vector<int> v[10],ans_path;//其中v[]是用邻接表存储的一个图。
int degree[NUM];
int N,M;//图节点从1~N , 边数一共有M条

//其中v[]是用邻接表存储的一个图。

bool TopologicalSort(){stack<int> S;for(int i=1;i<=N;i++){for(int j = 0; j<v[i].size(); j++){degree[v[i][j]]++;}}for(int i=1;i<=N;i++){if(degree[i]==0) S.push(i);}while(!S.empty()){int p = S.top();S.pop();ans_path.push_back(p);for(int i = 0;i<v[p].size();i++){degree[v[p][i]]--;if(degree[v[p][i]] == 0) S.push(v[p][i]);}}if(ans_path.size()<N) return false;else return true;
}

DFS版 Aniti_TopologicalSort(已确保该图是一个有向无环图)求得的结果是一个逆拓扑序列

const int NUM = 10;
vector<int> v[10],ans_path;
int N,M;//图节点从1~N , 边数一共有M条
bool visited[NUM];
void _TopplogicalSort_DFS(int t){visited[t] = true;for(int i=0;i<v[t].size();i++){if(visited[v[t][i]] == false)_TopplogicalSort_DFS(v[t][i]);}ans_path.push_back(t);
}

环路检测+TopologicalSort

color[]用来标记每一点的状态:
color[v] = 0表示还没有被访问,
color[v] = -1 表示 v 正在被访问(正在访问v及其后继节点)。
color[v] = 1表示 v 已经被访问完了,之后不会再回溯到该点了。
color[]初始化全为0;
/*color[]用来标记每一点的状态: color[v] = 0表示还没有被访问,color[v] = -1 表示 v 正在被访问(正在访问v及其后继节点)。color[v] = 1表示 v 已经被访问完了,之后不会再回溯到该点了。color[]初始化全为0;
*/
int color[NUM] = {0};
bool DFS_TopologicalSort(int t){color[t] = -1;for(int i = 0;i<v[t].size();i++){int p = v[t][i];//p为t的后继节点 //表示p的前继节点还未访问完,而p便可以访问到其前继节点,表示存在环路。if(color[p] == -1) {return false;}if(color[p] == 0){bool flag = DFS_TopologicalSort(p);if(flag == false) return false;}}color[t] = 1;//该节点访问完毕,标记为1。ans_path.push_back(t);return true;
}

【数据结构】拓扑排序 Kahn版和DFS版相关推荐

  1. Poj 1094 拓扑排序Kahn

    Poj 1094 拓扑排序Kahn Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4133 ...

  2. 拓扑排序(Kahn算法和基于DFS求解法)

    拓扑排序是对有向无环图(DAG)进行排序,从而找到一个序列.该序列满足对于任意一对不同的顶点u,v∈V,若G中存在一条从u->v的边,则在此序列中u在v前面. 拓扑排序也可以用来判断一个有向图是 ...

  3. (数据结构)有向图的拓扑排序 Kahn算法

    拓扑排序是对有向无圈图的顶点的一种排序,使得如果存在一条从vi到vj的路径,那么在排序中,vi必须出现在vj的前面. 首先,我们需要准备一个vector<int> link[maxn],l ...

  4. 拓扑排序----Kahn算法和字典序最小的拓扑排序

    一.拓扑排序定义: 二.卡恩算法(Kahn): 1.Kahn算法介绍: 有向无环图DAG至少具有一个度数为0的顶点和一个度数为0的顶点. 证明:上述事实有一个简单的证明,即DAG不包含循环,这意味着所 ...

  5. DAG拓扑排序-Kahn算法

    拓扑排序就是对一个有向无环图进行排序,使其变成一个线性关系,并且保证其前后的位置关系不改,简言之,就是把一个偏序变成一个全序(线性序). 拓扑排序有两种算法,一种是借助DFS排序,另一种是卡恩算法,这 ...

  6. 拓扑排序Kahn算法

    拓扑排序 介绍 思路 操作过程 完美图解 代码模板 介绍 拓扑排序,整体是给出n个事件先后关系,来确定n个事件最终的先后关系 思路 很好理解 操作过程 我们可以理解成一个有向图如果x事件在y事件的前面 ...

  7. 数据结构 拓扑排序、AOV 、AOE、关键路径

    AOV (Activity On Vertex) 活动在顶点上 AOV 网: 强调的是在一个完整的过程中,各个活动所发生的顺序 其中用顶点表示活动,用弧表示活动之间的优先关系,例如:在 ? 图中,活动 ...

  8. 拓扑排序-Kahn算法

    题目描述 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束后,Up 主会为所有 ...

  9. 拓扑排序——Kahn算法

    Kahn算法 #include <iostream> #include<vector> #include<list> using namespace std;// ...

最新文章

  1. SVN状态图标不显示的两种解决办法
  2. mysql 加快复制进程_MySQL并发复制进程演进
  3. kafka partition分配_kafka的分区分配策略
  4. 如何消费WCF Data Services定义的服务操作
  5. ASP.NET实现推送文件到浏览器的方法
  6. 研究发现:一心多用会使认知水平下降
  7. 用python祝福父亲节_父亲节给爸爸的祝福语微信48条
  8. 小白必须懂的MongoDB的十大总结
  9. mysql分布式写入_分布式系统知识点七:mysql读写分离简介(转载)
  10. android内容协调,理清Android协调布局CoordinatorLayout的摆放位置及特殊属性。
  11. ios点击推送闪退_苹果应用闪退是什么原因?如何解决进行ios签名后的苹果应用闪退问题?...
  12. [转载] Python判断分数等级if...elif...else
  13. PCIE的DMA和PIO介绍
  14. 高等数学辅导讲义_研学堂:考研数学辅导书测评
  15. 如何识别服务器网站有病毒,网站有病毒怎么解决?
  16. IOS-App Store 提审应用步骤
  17. 怎么用计算机打印出东西,打印东西怎么打印出来
  18. 一篇超频菜鸟必看的基础知识大全!
  19. DOS批处理命令之echo和@命令
  20. 湖南大学计算机专业女生宿舍,2020年湖南大学新生宿舍环境条件,大一新生男生女生宿舍内部图片【多图】...

热门文章

  1. extjs4mvc增删改查_Web应用增删改查的实现技巧
  2. 转岗大数据了,先用数据看看行情
  3. GridView导出Excel的超好例子
  4. beego原生mysql查询_go——beego的数据库增删改查
  5. Caused by: java.lang.ClassNotFoundException: Didn't find class com.zyh.testswiperefresh.MainActivit
  6. ISO20000包含
  7. 使用IDEA创建一个通过url链接生成二维码的java程序|自动生成二维码
  8. PHP资格证书查询系统源码 自动生成二维码 支持导入导出功能
  9. Games201学习笔记2:拉格朗日视角2
  10. CISAW风险管理学习笔记(2)-风险管理基本概念