给出一张包含n个节点、m条边的无向图(无重边,无自环),请你求出图上两点s,t间的最短路径长度。
其中1<=n<=500,1<=m<=10000,1<=任意边权<=500000;
Input
第一行两个数n,m,分别表示节点数和边数,以空格隔开; 之后m行,每行3个数u,v,w[i],表示点u和v间有一条权值为w[i]的边; 最后一行,两个数s,t表示选择的两个点,以空格隔开。
Output
输出一个数,表示s,t间最短路径的长度。
Sample Input
4 3
1 2 6
1 3 4
2 4 2
3 4
Sample Output
12
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int m=s.nextInt();
int x[]=new int[m];
int y[]=new int[m];
int w[]=new int[m];
for(int i=0;i<m;i++) {
x[i]=s.nextInt();y[i]=s.nextInt();w[i]=s.nextInt();
}
int X=s.nextInt();
int Y=s.nextInt();
int juzhen[][]=new int[n+1][n+1];
for(int i=0;i<m;i++) {
juzhen[x[i]][y[i]]=w[i];
juzhen[y[i]][x[i]]=juzhen[x[i]][y[i]];
}
int dis[]=new int[n+1];
for(int i=1;i<=n;i++) {
if(juzhen[X][i]!=0&&i!=X)
dis[i]=juzhen[X][i];
}
for(int i=1;i<=n;i++) {
if(dis[i]!=0) {
for(int j=1;j<n+1;j++) {
if(juzhen[i][j]!=0&&i!=j) {
if(dis[j]==0)
dis[j]=dis[i]+juzhen[i][j];
if(dis[j]>(dis[i]+juzhen[i][j]))
dis[j]=dis[i]+juzhen[i][j];
}
}
}
}
if(X==Y)
System.out.println(0);
else
System.out.println(dis[Y]);
}
}
#在eclipse上我带入好多次其他数,最终结果都是对的,可是vj上一直说我Wrong Answer,实在找不出哪里有问题,希望有人可以帮帮我。
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。