拓扑排序

Posted mohari

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拓扑排序相关的知识,希望对你有一定的参考价值。

问题1.判断有没有环

http://hihocoder.com/problemset/problem/1174

用vector模拟邻接表,开一个记录入度的一维数组,一个存储入度为0的队列

ac代码如下

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<string.h>
using namespace std;
typedef long long int ll;
int n,k,a,b,t,m;
const int maxn=1e5+5;
vector<int>v[maxn];
queue<int>q;
int indge[maxn];
bool judge()
{
    int num=0;
    while(!q.empty())q.pop();
    for(int i=1;i<=n;i++){
        if(!indge[i])q.push(i);
    }
    while(!q.empty()){
        int tot=q.front();
        q.pop();
        num++;
        for(int i=0;i<v[tot].size();i++){
            if(--indge[v[tot][i]]==0)q.push(v[tot][i]);
        }
    }
    if(num==n)return true;
    else return false;
}
int main()
{
    cin>>t;
    for(int i=1;i<=t;i++){
        cin>>n>>m;
        for(int i=0;i<maxn;i++)v[i].clear();
        memset(indge,0,sizeof(indge));
        for(int j=0;j<m;j++){
            cin>>a>>b;
            v[a].push_back(b);
            indge[b]++;
        }
        if(judge())puts("Correct");
        else puts("Wrong");
    }
    return 0;
}
/*
2
2 2
1 2
2 1
3 2
1 2
1 3
*/

 

以上是关于拓扑排序的主要内容,如果未能解决你的问题,请参考以下文章

拓扑排序代码:

使用 C# 代码实现拓扑排序

UVA10305 拓扑排序

【数据结构】请写出以下AOV网的拓扑排序序列

数据结构问题~啥图可以进行拓扑排序~啥图不能进行拓扑排序?

拓扑排序之变量序列代码