数学联邦政治世界观
超小超大

数学(三)

一个有向无环图,如果图中有入度为 0 的点,就把这个点删掉,同时也删掉这个点所连的边。

一直进行上面出处理,如果所有点都能被删掉,则这个图可以进行拓扑排序。

典型代表:食物链

参考代码如下

include:<bits/stdc++.h>

using namespace std;

const int N = 100010;

int n, m;

int h[N], e[N], ne[N], idx;//存图

int in[N]; // 存储每个结点的入度

void add(int a, int b)

{

e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;

}

bool topsort() {

vector<int> L;

queue<int> S;

for (int i = 1; i <= n; i++) {//遍历一遍顶点的入度。

if (!in[i]) S.push(i);

}//如果入度为 0, 则可以入队列

while (!S.empty()) { //循环处理队列中入度为0的点

int u = S.front();

S.pop();

L.push_back(u);

for (int i = h[u]; i != -1; i = ne[i]) //循环删除 u 发出的边

{

int j = e[i];//a 有一条边指向b

if (--in[j] == 0) //删除边后,b的入度减1

S.push(j);//如果b的入度减为 0,则 b 可以输出,入队列

}

}

if (L.size() == n)//如果队列中的点的个数与图中点的个数相同,则可以进行拓扑排序

{

for (auto i: L) cout << i << ' ';//队列中保存了所有入度为0的点,依次输出

return true;

} else return false;

}

int main()

{

cin>>n>>m;

memset(h, -1, sizeof h);

for (int i = 1; i <= m; i ++ )

{

int a, b;

cin>>a>>b;

add(a, b);

in[b] ++ ;

}

if (!topsort()) puts("-1");

return 0;

}

数学联邦政治世界观提示您:看后求收藏(笔尖小说网http://www.bjxsw.cc),接着再看更方便。

相关小说

(无限流)我就是想交个朋友 连载中
(无限流)我就是想交个朋友
麦穗花
【欢迎来到无限世界[域],在这里,特殊能力唾手可得,死亡更不是梦想,随时随地,身临其境,尖叫和欢笑,惊骇与心动,让我们——娱乐至死!】(ㅍ_......
1.3万字1年前
柔弱女主的封神之路 连载中
柔弱女主的封神之路
向天打月亮
柔弱女主觉醒后绑定了系统,一步步在诡异世界立足,达成灵魂与身体的双重逆袭
1.6万字1年前
异世界图书馆 连载中
异世界图书馆
镜蝶
〈别名:世界图书馆与少女梦谈〉一个偏远地区流传着一个传说,满月当空时,在荡漾着月辉的河中放下一只纸船,借着月光让纸船载着你一部分的灵魂,为你......
40.9万字11个月前
秋风下的女孩 连载中
秋风下的女孩
166***982_8882861693
同化,初心,消散
0.3万字10个月前
除了六哥,我们家,全都是重生的 连载中
除了六哥,我们家,全都是重生的
半生忧伤
(除了主cp外,还有副cp以及同人文cp)先虐后甜百里滟是东临国将军府的嫡小姐,爹爹是东陵国的百里大将军,她上面有六个哥哥,个个人中龙凤…东......
4.4万字8个月前
末世:新星 连载中
末世:新星
诺尔塔斯
主角在末世重新成长建立三观结交朋友共同创建人类命运共同体的过程。——————背景介绍:一个贪玩的高维生物不小心将一个使宇宙的再生平行世界的能......
2.3万字7个月前