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

数学(三)

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

相关小说

清冷钓系美人每天都在修罗场 连载中
清冷钓系美人每天都在修罗场
栖行止
谢笺屿长发窄腰,拥有一双纯净澈透的冰蓝色凤眸,浑身散发的清冷圣洁气息,让他稳坐s市首校磬华大学高岭之花的宝座美人清净自持,端方矜贵,走到哪里......
110.6万字4个月前
彼岸花开繁尘落 连载中
彼岸花开繁尘落
一盏蝶
“你真想好了吗?不打算再去见见他?”“还是不了,他如今是天界战神,只为苍生不为我……”“在你眼里我依旧是那个只为天下苍生而活的战神,去不知我......
7.4万字4个月前
这个自然之灵,自由之子有点腹黑啊 连载中
这个自然之灵,自由之子有点腹黑啊
Y159***65764
**自然之女,自由之灵**她出生于晨曦的温暖,伴着鸟鸣的乐章,她是自然之女,身披阳光的衣裳。她的笑声,是风的低语,她的眼神,是星辰的闪亮。她......
6.9万字2个月前
梦回山海 连载中
梦回山海
要献便献吻_37211257035372
本是青梅竹马,却了天意弄人。梦回过去。你还会做出同样的选择?
3.1万字1个月前
穿书后我在异世界当团宠帝姬 连载中
穿书后我在异世界当团宠帝姬
柳之之
神秘颜控少女沙小羊,某日在看完玛丽苏剧情的一本书后狠狠地吐槽了一番,结果证明……没事不要在背后说坏话Ծ‸Ծ,一觉醒来,她居然穿越到这本书里面......
8.1万字1个月前
时空碎片(上) 连载中
时空碎片(上)
Y.榆欢
0.6万字2周前