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

数学(三)

一个有向无环图,如果图中有入度为 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.2万字11个月前
冷宫九公主要翻身 连载中
冷宫九公主要翻身
某家女主
因为不想弄这么多任务,所以就直接只有旁白仿炮灰闺女的生存方式
60.9万字10个月前
兰式玉 连载中
兰式玉
匕首_27562892568598715
苏章是个杀手在执行任务时意外身亡,在睁眼就到了个陌生的地方,还绑定了万圣2.0系统,在个个小世界演绎角色。
1.6万字9个月前
本文番外 连载中
本文番外
月醉星河
作品为原创.禁止抄袭.不喜勿喷.作者:幻薇梦;幻洢梦;月醉星河;幻瑰梦;幻蝶梦;幻玫梦;洢佳;喜欢蓝天白云的L;柳柳薇;蔷薇的温柔以上都是作......
110.2万字8个月前
亓妄 连载中
亓妄
十云逝
亓妄说过,他只爱沈晚烟,他只信余倞和余焚。沈晚烟和他的母亲,是亓妄最后的防线;可在不久后,这最后的防线也断裂了。
1.3万字7个月前
玩家不会梦到过去 连载中
玩家不会梦到过去
会梦到现实
本文大多以游戏文本视角陈述,但有时会以其他视角书写,可以接受一些乱七八糟设定以及大杂烩的请往下看吧这是一个有趣的游戏,一切都要从那一天开始说......
0.5万字5个月前