Dijkstra
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。
请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。
输入格式
第一行包含整数n和m。
接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。
输出格式
输出一个整数,表示1号点到n号点的最短距离。
如果路径不存在,则输出-1。
数据范围
1≤n≤500,
1≤m≤105,
图中涉及边长均不超过10000。
输入样例:
3 3
1 2 2
2 3 1
1 3 4
输出样例:
3
Dijkstra是一种单源最短路问题:
时间复杂度: O(n^2)
空间复杂度: n^2
条件:不存在负边权
Dijkstra
算法的顺序:
1.初始化
2.循环
3.找到未在S中最小的dist ,然后把它加入S
4.用t来更新其他点的dist
主要代码(如有不懂见注释)
const int N=510;
int dist[N];//用于储存1~i的最短距离
bool st[N];//标记是否已是最短距离
int g[N][N],n;//g数字用来储存邻接矩阵,n为点个数
int dijkstra()
{
memset(dist,0x3f,sizeof(dist));//赋值为大数
dist[1