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]

拓扑排序的原理及其实现