最短路径Dijkstra算法(邻接矩阵)

Dijkstra算法的原理:

从某个源点到其余各顶点的最短路径,即单源点最短路径。单源点最短路径是指:给定带权有向图G和源点v,求从v到G中其余各顶点的最短路径。迪杰斯特拉(Dijkstra)提出了按路径长度递增的顺序产生各顶点的最短路径算法。 

该算法的基本思想是: 

(1)设置两个顶点的集合S和T=V-S,集合S中存放已找到最短路径的顶点,集合T存放当前还未找到最短路径的顶点; 

(2)初始状态时,集合S中只包含源点v0; 

(3)从集合T中选取到某个顶点vi(要求vi到v0的路径长度最小)加入到S中; 

(4)S中每加入一个顶点vi,都要修改顶点v0到T中剩余顶点的最短路径长度值,它们的值为原来值与新值的较小者,新值是vi的最短路径长度加上vi到该顶点的路径长度; 

(5)不断重复(3)和(4),直到S包含全部顶点。

 

算法设计:

1.首先函数里面运用二维数组cost[n][n]实现图的临界矩阵存储,数组dist[n]表示源点到节点n的最短距离,S[n]表示某一节点n是否已经进入集合S,如果进入则将S[i]置为1,否则为0。pre[n]表示当前节点n的前驱节点(用来输出路径)。

2.在开始遍历之前,首先给数组D[n]赋值为源点到该点的距离,这样便能第一次找到源点到相邻节点的最短距离(dist[i]=cost[v][i];࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值