AcWing 851. spfa求最短路-java
原题链接
简单
作者:
Susu
,
2020-01-30 13:49:19
,
所有人可见
,
阅读 670
import java.util.*;
public class Main {
static int N = 100010;//边数M
static int n,m;
static int idx;
static int[] h = new int[N];
static int[] w = new int[N];
static int[] e = new int[N];
static int[] ne = new int[N];
static int[] dist = new int[N]; //用于记录每一个点距离第一个点的距离
static boolean[] st = new boolean[N];//用于记录该点的最短距离是否已经确定
static int spfa(){
for(int i=0;i<N;i++){
dist[i]=0x3f3f3f; //初始化距离 0x3f代表无限大
}
dist[1]=0;
Queue<Integer> q = new LinkedList<>();
q.add(1);
st[1]=true;
while(!q.isEmpty()){
int t = q.poll();
st[t]=false;
for(int i=h[t];i!=-1;i=ne[i]){
int j = e[i];
if(dist[j]>dist[t]+w[i]){
dist[j]=dist[t]+w[i];
if(!st[j]){
q.add(j);
st[j]=true;
}
}
}
}
if(dist[n]==0x3f3f3f) return -1; //如果第n个点路径为无穷大即不存在最低路径
return dist[n];
}
static void add(int a,int b,int c){
e[idx]=b; w[idx]=c; ne[idx]=h[a]; h[a]=idx++;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
for(int i=0;i<N;i++){
h[i]=-1;
}
while(m-->0){
int x = sc.nextInt();
int y = sc.nextInt();
int z = sc.nextInt();
add(x,y,z);
}
if(spfa()==-1) System.out.print("impossible");
else System.out.print(spfa());
}
}
java里面0x3f3f3f就是和C语言里面0x3f3f3f3f一样大了吗
没研究过