宁河做网站公司,怎么创造自己的网站,百度推广账号怎么注册,遵义网站建设制作知识概览 求图的拓扑序是图的宽搜的一个很经典的应用#xff0c;拓扑序列是针对有向图来说的。 拓扑序列的定义是#xff1a; 如果说一个点的序列满足对于图中的每条有向边(x, y)#xff0c;x都出现在y的前面#xff0c;那就称这个序列是这个图的拓扑序列。 备注#xff…知识概览 求图的拓扑序是图的宽搜的一个很经典的应用拓扑序列是针对有向图来说的。 拓扑序列的定义是 如果说一个点的序列满足对于图中的每条有向边(x, y)x都出现在y的前面那就称这个序列是这个图的拓扑序列。 备注拓扑序列是指所有的边都是从前指向后的。只要有一个环就一定没有拓扑序列。可以证明有向无环图一定存在一个拓扑序列所以有向无环图也被称为拓扑图。
必备知识 有向图的每个点有两个度一个是入度一个是出度。入度一个点有几条边进来。出度一个点有几条边出去。 例题展示
题目链接
活动 - AcWing系统讲解常用算法与数据结构给出相应代码模板并会布置、讲解相应的基础算法题目。https://www.acwing.com/problem/content/850/
代码
#include cstring
#include iostream
#include algorithmusing namespace std;const int N 100010;int n, m;
int h[N], e[N], ne[N], idx;
int q[N], d[N];void add(int a, int b)
{e[idx] b, ne[idx] h[a], h[a] idx;
}bool topsort()
{int hh 0, tt -1;for (int i 1; i n; i)if (!d[i])q[tt] i;while (hh tt){int t q[hh];for (int i h[t]; i ! -1; i ne[i]){int j e[i];d[j]--;if (!d[j]) q[tt] j;}}return tt n - 1;
}int main()
{cin n m;memset(h, -1, sizeof h);while (m--){int a, b;cin a b;add(a, b);d[b];}if (topsort()){for (int i 0; i n; i) printf(%d , q[i]);puts();}else puts(-1);return 0;
} 参考资料
AcWing算法基础课