*图论基础(5)

持续更新...

1.图的基本概念

不写了,网上有好多资料ovo

2.图的存储和遍历

2.1存储:

3.最小生成树

 

 3.2Kruskal算法

4.拓扑排序

拓扑排序的⽬标是将有向⽆环图中的所有结点排序,使得排在前⾯的结点不能依赖于排在后⾯的结
点。在课程问题中,相当于就是找到⼀个排课的合法顺序。具体流程可借助队列进⾏:
1. 将图中所有⼊度为 0 的点,加⼊到队列中;
2. 取出队头元素,删除与该点相连的边。如果删除之后的后继结点的⼊度变为 0,加⼊到队列中;
3. 重复 2 操作,直到图中没有点或者没有⼊度为 0 的点为⽌。
拓扑排序判断是否有环:
跑⼀遍拓扑排序算法,如果有结点没有进队,那么就表明有环。
【题⽬描述】
有个⼈的家族很⼤,辈分关系很混乱,请你帮整理⼀下这种关系。给出每个⼈的后代的信息。输出⼀个序列,使得每个⼈的后辈都⽐那个⼈后列出。
【输⼊描述】
第 1⾏⼀个整数N ,表⽰家族的⼈数。接下来 N⾏,第 i⾏描述第i 个⼈的后代编号ai,j ,表⽰ai,j 是i 的后代。每⾏最后是0 表⽰描述完毕。
【输出描述】
输出⼀个序列,使得每个⼈的后辈都⽐那个⼈后列出。如果有多种不同的序列,输出任意⼀种即可。
【题⽬描述】
G 为有 n 个顶点的带权有向⽆环图, G 中各顶点的编号为 1 到 n ,请设计算法,计算图 G 中 1, n 间 的最⻓路径。
解法⼀:转换为最短路。
问题转化:当所有边的权值改成相反数。
那么最⻓路问题就变成了最短路问题,找出最短路之后,输出相反数即可。
注意:这种⽅法是万能的,但是如果数据范围过⼤时,时间复杂度接受不了

解法⼆:拓扑排序 + 动态规划。
在本题中有个重要的条件,对于任意⼀条边 u->v,u 都是⼩于 v 的。因此,1 绝对是⼊度为 0 的点,n
绝对是出度为 0 的点。并且图中没有环形结构,是⼀个拓扑图。在拓扑图中,可以看做 1 为起点,n 为
终点。那么就可以利⽤拓扑排序的过程,更新出最⻓路。
细节问题:有可能存在别的⼊度为 0 的点,需要提前处理掉。

动态规划的逻辑:
1. 状态表⽰: f[i] 表⽰从 1 ⾛到 i 位置的最⻓路。
2. 状态转移⽅程: f[i] = max(f[prev] + w) ,其中 prev 为 i 结点的前驱结点,w 为 i->prev
的权值。

5.单源最短路

• 单源最短路,即图中⼀个顶点到其它各顶点的最短路径。
• 多源最短路,即图中每对顶点间的最短路径

 

5.2 bellman-ford 算法(很暴力)

是⼀种基于松弛操作的最短路算法,可以求出有负权的图的最短路,并可以对最短路不存在的情况进⾏判断。
算法核⼼思想:不断尝试对图上每⼀条边进⾏松弛,直到所有的点都⽆法松弛为⽌。

6.多元最短路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值