最短路径图算法(shortest path dijkstra)

算法

1)新建一个集合sptSet(shortest path tree set)用来记录最短路径树上的节点。初始状态sptSet为空

2)给图中的节点赋上一个距离值。初始状态所有节点的距离值为INFINITE.将源节点的距离值赋值为0.

3)while sptSet没有包含所有节点:

...a)从图中距离值最小的节点u放入集合sptSet中

...b)更新节点u的所有邻居节点的距离值。更新规则:如果从源节点到u的邻居结点v的距离和小于当前v的距离值,那么更新更新之,否则不更新。

下面举例说明:


初始状态sptSet为空,图的所有节点的距离值为{0,INF,INF,INF,INF,INF,INF,INF}。现在选择图中距离值最小的放入集合sptSet中。节点0被选中。所以sptSet为{0}。接下来更新节点0的邻居结点的距离值。邻居节点1和7的距离值更新为4和8.下面这个子图显示了被更新的距离值,只有有限距离的节点才在子图中。最小生成树的节点用绿色表示。


从子图中的节点(不包含已经在sptSet中的节点)选择最小距离值的节点。节点1被选中,加入集合sptSet中。sptSet变为{0,1}。更新节点1的所有邻居节点的距离值,节点2的距离值变为12.邻居节点7的距离值不更新是因为当前距离值比较小。


从子图中的节点(不包含已经在sptSet中的节点)选择最小距离值的节点。节点7被选中。sptSet变为{0,1,7}。更新7的邻居节点的距离值,结点6和8的距离值分别变为9和15.


从子图中的节点(不包含已经在sptSet中的节点)选择最小距离值的节点。节点6被选中。sptSet变为{0,1,7,6}。更新6的邻居节点的距离值,结点5和8的距离值分别变为15和11.


按照以上步骤重复执行,最终会得到一个最小生成树:


C语言实现:

邻接矩阵(adjacence matrix)版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值