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

数学(三)

一个有向无环图,如果图中有入度为 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),接着再看更方便。

相关小说

顾影自须怜 连载中
顾影自须怜
某懒
一白衣一青袍,两人相伴同行,云游四方,揭开世间百态,有喜,有悲,有离别,有相逢,同在一起便是最好…
4.1万字12个月前
某天成为公主维塔 连载中
某天成为公主维塔
和煦的微风
希娅的双胞胎妹妹,一个普通的现代大学生,被错位的命运裹挟着穿越成一个原著中不该存在人物。(小学生文笔)(之前写过一个类似的,之后写不下去就弃......
5.4万字11个月前
思念在左爱在右 连载中
思念在左爱在右
蔷影
快穿长篇,孰强孰弱,好难猜哦~
0.8万字7个月前
五行传奇 连载中
五行传奇
柒茉_
这个嘛……剧透?打咩!想知道内容就进来看看叭~(灵感来源于小学时和好朋友玩的角色扮演小游戏~)
2.3万字6个月前
烈焰蝶影——虚妄的八芒星 连载中
烈焰蝶影——虚妄的八芒星
玖星尘
二人重新回到了那个噩梦世界,不知为何无法脱困,一个关键人物归还她们的自由,让这三个伤痕累累的心治愈,仿佛那个人物就是这个噩梦世界的……创作者......
2.0万字6个月前
唯一的知情人 连载中
唯一的知情人
仿古雀鸟
陈小梦以月冰的身份,诞生了这个充满灵力的庸俗设定岛屿中,能力规则都懂,唯一对自己的身份抱有谜题,从碎碎念到默不作声(包含搞笑成分并且前几章,......
7.5万字6个月前