算法设计与分析5(3图的补充)

有向图求解最短路径算法

Dijkstra算法:

主要用来求具体的某一点到其他个点的最短路径

首先,放置两个空集合
一个集合1放已求出最短路径的点,另一个集合2放未求最短路径的点
举例,
有向图

在一个图中,有A,B,C,D,E五个结点
求A到各点的最短距离

首先将A点(源点)放入集合1中,
因为我们已知A点到自己的最短距离是0,是A点到所有点 距离的最小值

下一步,看A点到B,C,D,E四点的距离
AB=10,
AC=+∞(未直接相连),
AD=30,
AE=100
可以看出,AB值最小,距离最短,所以将B加入集合1中

将B加入集合1后,看剩余A到C,D,E的最短路径值是否发生变化
此时到C,D,E三点的最短距离分别是:
ABC=60,
AD=30,
AE=100
AD距离最短,将D加入集合1

重复,看加入D后A到C,E的路径值
ABC=60 -> ADC=50
AE=100 -> ADE=90

将C加入集合1
ADE=90 -> ABCE=70
可以看到结果,A到各点最短距离:
AB=10,
AD=30,
AC=50,
AE=70

Floyd算法:

主要用于求解所有点之间最短路径的问题
用一个矩阵或者二维表来求解
在这里插入图片描述

对角线值均为0
两点间有边则填边的权值
无边则用∞表示

开始只有直接相连的路径值
然后,逐渐加入中转点,
加入一个中转点就查看一次各点之间最短路径是否改变
修改矩阵中的值
如,先看如果可以经过v0中转,是否可以缩短路径
然后看经过v0,v1中转是否可以缩短路径,然后依次查看
最后得到所有点之间的最短路径

判断是否有环

有向图:

对有向图进行拓扑排序,看是否所有结点都进入了序列

无向图:

1.对于无向图的每个连通分量,如果边数E大于等于顶点数V,则该连通分量中一定存在环
2.某个顶点开始进行深度优先遍历,在遍历过程中,如果遇到某个顶点的一条边指向已经访问过的顶点(且这个顶点不是当前顶点的父顶点),则说明存在环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值