Dijkstra又称单源最短路算法,就从一个节点到其他各点的最短路,解决的是有向图的最短路问题
此算法的特点是:从起始点为中心点向外层层扩展,直到扩展到中终点为止。
该算法的条件是所给图的所有边的权值非负。
实现的Dijkstra的过程其实也是一种贪心。
其实把下图看懂,基本Dijkstra的实现流程就差不多了
算法流程如图:
算法代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 1010;
const int INF = 0x3f3f3f3f;
int Map[maxn][maxn], vis[maxn], dis[maxn];
int n, m;
void init() {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i == j)Map[i][j] = 0;
else Map[i][j] = INF;
}