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

数学(三)

一个有向无环图,如果图中有入度为 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.7万字10个月前
凌安诺 连载中
凌安诺
埋葬_00207106129821649
一位是清冷的大师兄,一位是皎皎如月的小师妹,他们是人人称赞的模范夫妻……只是小师妹消声灭迹,寻不到人影。大师兄身负重伤,昏迷不醒……
0.7万字10个月前
无限:古堡之诗 连载中
无限:古堡之诗
槐x2
这是一个古怪的世界,所有人都被【系统】分配进各个无限流游戏关卡副本中【古堡之诗】通关率5%,危险率???但仍有倒霉蛋被分配在一起,6人一组作......
8.1万字9个月前
心灵山等雪 连载中
心灵山等雪
温💔柔🦋
讲述了一个叫顾思耀的皇子爱上了一个叫沈念心的女孩,在一次的大战中,顾思耀不想连累沈念心,骗走了她,自己却失去了生命,沈念心抱着顾思耀的身体,......
2.3万字8个月前
上帝的宣言 连载中
上帝的宣言
胡秀才
讲述了一个孩子,有着一个不一般的人生,他遭受了生活的折磨,他的出生仿佛在追寻一种东西,他想寻找上帝,为他指出一条明路,指出一条可以拯救全人类......
0.2万字7个月前
校园快穿,清纯小白莲暴力斩妖 连载中
校园快穿,清纯小白莲暴力斩妖
蛋炒饭很香
校园妖魔横行,破解学生惨案。惨死的学生成为害人的妖,背后都有一个痛苦的事件。
0.4万字6个月前