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

数学(三)

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

相关小说

彩虹的光辉 连载中
彩虹的光辉
曦光耀雪
唐彩星成神的故事.这里古月娜他们不是毁灭之神和生命女神,她原本以为自己是唐三的女儿其实自己是生命女神的女儿,因为毁灭之神怕毁灭之力干扰了女儿......
2.8万字11个月前
珩时 连载中
珩时
安逸_liberty
世界背景:这是个有异能者和魔兽的世界,这些异能者都归国家的科学家研究。(此为幻想类世界观,与现实世界无关)基本消息:每6个异能者分为一队,按......
0.6万字10个月前
cult:最后是亲哥哥 连载中
cult:最后是亲哥哥
琼Y
暴力复仇,屠亲,恐怖继续。爱是在谎言和誓言之间徘徊的。把那个同学推下悬崖只是Amy的第一步,亲爱的哥哥Bill,你终于回到这个小镇上来了。我......
8.9万字7个月前
云雾尽散 连载中
云雾尽散
银线皎月
过一个个的副本,让自己的心变得铁石心肠,直到救出自己的命定之人
0.9万字6个月前
楼影集 连载中
楼影集
南枝絮柳
蝉鸣、霜、废纸般的影子,铺就压抑的底色;锈色月亮、暗红血浆与肋骨裂纹,将个体的溃烂层层剖开。当荆棘穿透胸腔,你睫毛上的雪与心脏褶皱里的藤蔓,......
35.8万字4个月前
绿萝共生 连载中
绿萝共生
minimo
林佳佳被诊断出脑瘤晚期,只剩三个月生命。暴雨夜,她打工的花店里,绿萝藤蔓突然
4.0万字4个月前