Djikstra最短路径算法

      一、概括:贪心策略

Dijktra最短路径算法采用的是一种贪心的策略,通过逐次地找到各点距起点的最短路径并由该路径更新该顶点出度的路径,进而使图中所有点距离起点路径最短的算法。

   详细推导过程可见:https://blog.csdn.net/qq_35644234/article/details/60870719

      二、数据结构:

1.一维数组:

int dist[] :用于保存距离起点最短路径,若与起点不连通则用一个较大的数表示(如16进制的:0x3f3f3f)

int/bool flag[]:用于保存已经得出最短路径的顶点的集合,已得出则为1/true,否则为0/false

 char s[] :用于保存图中的顶点名称等,也可以用一个结构体保存。

2.二维数组:

int map[][]:邻接矩阵(二维数组)的形式保存一个图的基本信息,其中权重为初始路径。

三、代码实现:

输入:

总顶点数:n     总边数:m

接下来m 行: 顶点:a 顶点:b 距离:len

输入起点:start

输出:

各顶点据起点的最短距离

dist [ i ]

c/c++混搭语言代码:

注释:输入数据均以1为起点,秉承勤俭节约的中华传统,数组都是以0为起点(其实就是懒得改了)

测试数据:

Djikstra最短路径算法_第1张图片

图片来源:https://blog.csdn.net/qq_35644234/article/details/60870719

6 8
1 3 10
1 5 30
1 6 100
2 3 5
3 4 50
4 6 10
5 4 20
5 6 60
1

输出:

1 ->1 : 4144959
1 ->2 : 4144959  //为一个大数,可在输出时改成其他符号如~
1 ->3 : 10
1 ->4 : 50
1 ->5 : 30
1 ->6 : 60

#include
#include
#define MAX 100
#define inf 0x3f3f3f
#define min(a,b) a%d : %d\n",start,i+1,dist[i]);//方便观察数据i+1.

    return 0;
}

void find_shortest(int start)
{

for(int i = 0 ; i

 

你可能感兴趣的:(贪心算法,c++,算法)