c_cpp Kahn的拓扑排序算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp Kahn的拓扑排序算法相关的知识,希望对你有一定的参考价值。
// https://www.geeksforgeeks.org/topological-sorting-indegree-based-solution/
#include <bits/stdc++.h>
using namespace std;
class graph {
int v;
list<int> *adj;
vector<int> indegree;
public:
graph (int v) {
this->v= v;
adj= new list<int> [v];
for (int i=0;i<v; i++)
indegree.push_back(0);
}
void addEdge (int u, int w) {
adj[u].push_back(w);
indegree[w]++;
}
void khans(queue<int> &, int );
};
void graph::khans(queue<int> &q, int visited) {
for (int i=0;i<v; i++) {
if (indegree[i]==0)
q.push(i);
}
while (!q.empty()) {
int s= q.front();
visited++;
list<int>::iterator i;
for (i= adj[s].begin(); i!= adj[s].end(); ++i) {
indegree[*i]--;
if (indegree[*i]==0)
q.push(*i);
}
cout<< s << " ";
q.pop();
}
}
int main() {
graph g(6);
g.addEdge(5, 2);
g.addEdge(5, 0);
g.addEdge(4, 0);
g.addEdge(4, 1);
g.addEdge(2, 3);
g.addEdge(3, 1);
int visited=0;
queue<int> q;
g.khans(q, visited);
}
以上是关于c_cpp Kahn的拓扑排序算法的主要内容,如果未能解决你的问题,请参考以下文章
AOV网络和Kahn算法拓扑排序
Vj作业拓扑排序经典理解题Ordering Tasks 1Kahn算法;2基于DFS的算法。
图论排序---拓扑排序
拓扑排序详解
POJ1270 Following Orders[拓扑排序所有方案 Kahn]
拓扑排序的原理及其实现