1. 算法原理
参考此篇足矣:
Dijkstra算法图文详解
2. C++ 实现
问题描述:
有四个节点( 0,1, 2, 3),已知 0和1之间的距离为3米, 1和2之间的距离为4米,2和3之间的距离为2米, 0和3之间的距离为5米。
求:1 --> 3的最短距离是多少?
思路:采用邻接矩阵法,通过二维vector保存相邻节点的距离,其中:自节点距离为0,不相连节点的距离初始化为一个很大的值INF
vector<vector<int>> global_map = {
// 纵坐标为起点,横坐标向为终点
/*0*/ /*1*/ /*2*/ /*3*/
/*0*/ {
0, 3, INF, 5},
/*1*/ {
3, 0, 4, INF},
/*2*/ {
INF, 4, 0, 2},
/*3*/ {
5, INF, 2, 0}}
#include <iostream>
#include <vector>
#include <algorithm>
#include "stdio.h"
using namespace std;
#define INF 99
// /*A*//*B*//*C*//*D*//*E*//*F*//*G*/
//int global_map[][6] = // {
// /*A*/ { 0, 12, INF, INF, INF, 16, 14},
// /*B*/ { 12, 0, 10, INF, INF, 7, INF},
// /*C*/ { INF, 10, 0, 3, 5, 6, INF},
// /*D*/ { INF, INF, 3, 0, 4, INF, INF},
// /*E*/ { INF, INF, 5, 4, 0, 2, 8},
// /*F*/ { 16, 7, 6, INF, 2, 0, 9},
// /*G*/ { 14, INF, INF, INF, 8, 9, 0}};
/*int N = sizeof(global_map) / sizeof(global_map[0]);
int M = sizeof(global_map[0]) / sizeof(global_map[0][0]);
vector<vector<int>> vec_map(N, vector<int>(M));
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
{
vec_map[i][j