【五】【数据结构】图dijkstra最短路径 邻接矩阵(无项、有权)代码简单实现深度解析

您所在的位置:网站首页 龙舟造句最短简单的 【五】【数据结构】图dijkstra最短路径 邻接矩阵(无项、有权)代码简单实现深度解析

【五】【数据结构】图dijkstra最短路径 邻接矩阵(无项、有权)代码简单实现深度解析

2024-03-25 19:55| 来源: 网络整理| 查看: 265

这个代码是在图的邻接矩阵(无项、有权)的代码的基础上,添加了dijkstra最短路径函数,并且修改测试用例和主函数代码,图的邻接矩阵(无项、有权)的代码具体请查看 【C语言\数据结构】图之邻接矩阵(无向、有权)代码简单实现,这里就不过多赘述。

dijkstra最短路径实现思路

我们用一个案例来解释dijkstra最短路径的思路:

引入问题:求A顶点到达其他顶点的最短路径长度和最短路径。

引入定义:一个顶点到达其他顶点的直接距离的最小值就是最短路径。

例如,A顶点可以到达BDEF四个顶点,直接距离分别是AB2,AD4,AE3,AF5,这些距离的最短直接距离是AB2,则AB2就是最短路径。

因为如果你想从A到达其他顶点再从其他顶点到达B,第一步的距离一定要比AB这个直接距离大,所以AB就是最短路径。

接着我们引入judgment[i]和dist[i]和path[i]一维数组,分别表示A顶点到i顶点最短路径有无确定,A顶点到i顶点的最短路径,和该最短路径中i顶点的前一个顶点的下标。

首先我们访问A顶点,把A顶点到其他顶点的直接距离,修正到dist数组中,也就是目前A顶点到其他顶点的最短路径长度,path数组都存储A,因为目前的最短路径中,各顶点的前一个顶点的下标就是A。

接着我们找到最短的直接距离,依据定义我们知道AB就是A到B的最短路径,把judgment[B]修正为true,表示A到B的最短路径已经确定,然后访问B顶点,看看A到B再由B顶点到其他顶点的距离,会不会比目前存储的dist最短路径还要小,如果还要小,就修正dist和path数组。

第一步,访问A顶点,得到:

第二步:找到dist中最小的值,这个值的judgement必须为false,已经确定的最短路径就不需要访问了。把judgement[B]置true,由B顶点修正dist和path。B顶点到C顶点距离是2,ABC距离一共是4,比dist存储的无穷要小,就修正dist,接着修正path。

第三步:在还没有确定最短路径的顶点中,找dist最小的值,EF随便选一个,再由E顶点修正其他没有确定最短路径的顶点的dist和path,由于E只能到D或者A,A顶点最短路径已经确定不考虑,ED是2,2+3=5大于4,所以不用修正。

第四步:F中找到dist最小的顶点F,把F顶点的judgmen改为T,再通过F顶点修正dist和path,由于F只能到A或者B,AB的最短路径已经确定,不考虑。

第五步:在judgment为F的顶点中找到dist最小的顶点,CD选一个C,judgement改为T,由C顶点修正剩下judgment为F的顶点,C可以到BD,B最短路径已经确定不考虑,CD是2,C的dist4+2大于D的dist,不修正。

第六步:

编写dijkstra最短路径函数 void dijkstra(graph g, int v, int dist[], int path[]) { bool judgment[MAX]; for (int i = 1; i


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3