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

数学(三)

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

相关小说

我的养父是吸血鬼 连载中
我的养父是吸血鬼
多肽小芬
身为吸血鬼的克莱尔在一次任务中心脏受损,并且失去了自己腹中三个月的孩子,为了活下去,他将自己的力量寄托在一个人类婴儿的心脏上,他抚养这个男孩......
2.3万字1个月前
叶罗丽之水的皇后 连载中
叶罗丽之水的皇后
江厌妤
她,凤凰的公主;她,水的王妃;她,从小就自宠爱为一身。可她却收到了心灵的打击
1.0万字1个月前
守护之罪 连载中
守护之罪
尹莲桃
安薇薇出了意外一朝穿越,来到了一个气运之子的气运容易爆棚的仙侠世界,这里很熟悉,因为这里是自己写的小说世界!安薇薇穿越到反派师尊上,竟然发现......
11.5万字1个月前
快穿之掉进小说当女配 连载中
快穿之掉进小说当女配
_奶茶不饿_
女主周夕莹再一次偶然穿越到一本小说里变成了女配鹿淼婵。在里面组成了一系列新的故事请大家多多关注,请大家打打卡,请大家收藏收藏若需要我回访,请......
16.3万字1个月前
星辰战士之星辰归来 连载中
星辰战士之星辰归来
爱吃草的羊
来自遥远宇宙深处万星族的芊滢,本是一个幸福的公主,但是,有一天,突然万星族发生了一次严重的灾难,她被不明能量攻击,来到了地球,有神秘人一直在......
4.1万字1个月前
瓢猫之间的羁绊 连载中
瓢猫之间的羁绊
咕噜咕噜思密达
在一次次历险过程中,黑猫罗尔的最终都回来了,可是那一次他没有回来,却以另一种方式默默守护在他最心爱的女孩身边
1.9万字1个月前