图论
树和图的存储
详情点击查看
1.树是一种特殊的图,无环连通图
所以只需要考虑图是怎么存储的
2.图分为两种:有向图和无向图
无向图是一种特殊的有向图,所以只需要考虑有向图是怎么存储的
3.有向图:
邻接矩阵 g[a, b] 存储a->b的信息,true代表有边,false代表没有边;
用的比较少,因为空间复杂度是n^2的,适合存储稠密图
邻接表 n个点,每个点上都连了一个单链表
单链表上存储该点可以走到的所有的点
树和图的遍历
详情点击查看
树和图的深度优先遍历和宽度优先遍历其实是特殊的DFS和BFS
树和图的深度优先遍历
详情点击查看
例题:树的重心
1 | 给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。 |
1 |
|
树和图的宽度优先遍历
详情点击查看
例题:图中点的层次
1 | 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环。 |
1 |
|
拓扑排序
详情点击查看
拓扑序列,所有边都是从前指向后的
如果存在环,那么就一定不存在拓扑序。
可以证明,有向无环图一定至少存在一个入度为0的点,一定存在拓扑序列,所以有向无环图又被称为拓扑图。
有向图中,一个点有几条边指向自己就称有几条入度
一个点有几条边指出去就称有几条出度
所以,拓扑图中,所有入度为0的点都可以作为起点,排在当前最前面的位置
拓扑排序第一步:把当前所有入度为0的点入队
第二步,宽搜,取出队头—>t
第三步,枚举t的所有出边t—>j
第四步,删掉t—>j,d[j]—
第五步,如果d[j] == 0,j—>queue
例题:有向图的拓扑序列
1 | 给定一个 n 个点 m 条边的有向图,点的编号是 1 到 n,图中可能存在重边和自环。 |
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 adomais's blog!
评论





