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

数学(三)

一个有向无环图,如果图中有入度为 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 = ont();

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://tongren.me),接着再看更方便。

相关小说

虫族文系列 连载中
虫族文系列
魏倾魏安宁
虫族文,单元向。
0.5万字9个月前
魔神对决 连载中
魔神对决
191***612
为了战胜邪恶势力,叶寻与千颜克服重重困难去寻找上古神兽,只为最终一战,给世界一个和平。
10.1万字9个月前
紫藤花开:与君归 连载中
紫藤花开:与君归
仙鹤浮云
纪凌月从小是一个孤儿,直到某一天,她迎来了从未相见的“哥哥。”也因一个梦境,让她相识了体内的另一个灵魂,纪洛曦。也因一个梦境,让她想起自己是......
14.7万字9个月前
末世求生:我绑定了酒店系统 连载中
末世求生:我绑定了酒店系统
是紫色呀
末世三年,被亲妹妹害死的苏秦秦重生在死前三分钟,还绑定了一个酒店系统。自从绑定了系统,苏秦秦就一路起飞。末世没吃的?不好意思,酒店里啥吃的都......
9.0万字9个月前
在惊悚游戏里触发隐藏任务 连载中
在惊悚游戏里触发隐藏任务
加绒不保暖
车祸嘎掉的余西淳进入了一个惊悚游戏。本着玩儿的心态,经历了不少诡异刺激的副本。有树礼高中的坠楼真相,有好孩子幼儿园的秘密,有妙壶村的神祠和药......
5.3万字9个月前
ALL祺:朱雀 连载中
ALL祺:朱雀
结绮
不能透露剧情的哦,可以猜一猜,期待的收藏哦!作者学生,要写作业,可能不会天天更,有时间给你们更!
0.7万字9个月前