题目
解释
AcWing 849. Dijkstra求最短路 I - AcWing
- g[i][j]代表i到j的距离
- 用上界0x3f3f3f3f(在memset里可以用0x3f来替代)初始化没有边的两个结点
- 执行n-1次循环,每次确定一个点到1号结点的最短距离
- 每次循环中查找没有确定最短距离的结点中离1号结点距离最近的那个结点dist[t]
- 然后比较这些没有确定最短距离的结点的当前dist和dist[t]+g[t][i]的大小
- 为什么可以这么做需要查找具体的迪杰斯特拉算法数学证明
- 最外层for循环执行n-1次是因为,最后一个结点可能要经过n-1个结点才是最短距离
- 也可以理解成每执行一次确定一个结点的最短距离,这样至少确定完n-1个结点的最短距离
- 此时第n个结点的最短距离也就出来了
代码段
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N=510;
int g[N][N];