AcWing 849. Dijkstra求最短路 I
原题链接
简单
作者:
Acvv_scl
,
2021-03-07 18:36:13
,
所有人可见
,
阅读 285
- 理解n次循环 每次找出一个最近的点;
- 使用找到的最近的点 更新下其他的距离
import java.util.*;
public class Main{
static int N=510;
static int n;
static int m;
static final int INF=Integer.MAX_VALUE>>1;
static int [][]g=new int[N][N];
static int []dist=new int[N];
static boolean []st=new boolean[N];
static int dijkstra(){
Arrays.fill(dist,INF);
dist[1]=0;
//n次循环 每次找出一个最近的点;
for(int i=0;i<n;i++){
//找到的最近的点;
int t=-1;
for(int j=1;j<=n;j++){
//找到最近的点 并更新t的值
if(!st[j]&&(t==-1||dist[t]>dist[j]))t=j;
}
st[t]=true;
//使用找到的最近的点 更新下其他的点的距离
for(int j=1;j<=n;j++){
dist[j]=Math.min(dist[j],dist[t]+g[t][j]);
}
}
return dist[n]==INF?-1:dist[n];
}
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
Arrays.stream(g).forEach(t->Arrays.fill(t,INF));
for(int i=0;i<m;i++){
int x=sc.nextInt();
int y=sc.nextInt();
int z=sc.nextInt();
g[x][y]=Math.min(g[x][y],z);
}
System.out.println(dijkstra());
}
}