java 请教(单源点最短路径)

来源:百度知道 编辑:UC知道 时间:2024/06/02 16:00:09
这是个求单源最短路径的代码,已知联通无向加权图(存放在二维数组中)
public class s {
public static void main(String[] args){
int[][] a=new int[10][10];
a[0][0]=0;
a[1][1]=0;
a[2][2]=0;
a[3][3]=0;
a[0][1]=1;
a[0][2]=2;
a[0][3]=8;
a[1][0]=1;
a[1][2]=9;
a[1][3]=6;
a[2][0]=2;
a[2][1]=9;
a[2][3]=3;
a[3][0]=8;
a[3][1]=6;
a[3][2]=3;
int[] path=new int[4];
int[] dist=new int[4];
ShortestPath(a,dist,path,3);
printShortestPath(a,dist,path,3);
}
public static void ShortestPath(int[][] edge,int[] dist,int[] path,int x){
int[] s=new int[4];
int i,j,k,w,min;
for (i=0;i<4;i++)
{
dist[i]=edge[x][i];
s[i]=0;
if(i!=x&&dist[i]<100)
path[i]=x;
else path[i]=-1;
}
s[x]=1;
dist[x]=0;
for (i=0;i<3;i++){
min=100;
int u=x;
for (j=0;j<4;j++)
if(s[j]==0&&dist[j]<min){

printShortestPath中的int[] path的参数传入值为[2,3,3,-1];当i=1时,j=1,while (j!=0){ 进入循环 j=path[j];}当j等于1时,3=path[1];循环第二次当j等于3时,-1=path[3];循环第三次,当j=-1时,paht[-1]问题就在这。

path[]={2,3,3,-1}
当path[3]=-1时,通过j = path[j];使得j为-1
下次继续循环时j为-1,得到path[-1]这样的表达式,于是发生错误