我正在尝试用Java编写Floyd程序来计算给定图的最短路径,并且邻接矩阵需要存储在一个一维数组中(仅下部三角形的元素)。主要算法编写如下:
int i, j, k, m, n;
for(k=0;k<n;k++){
for(i=1;i<n;i++){
for (j=0; j<i; j++) {
m=w[((i-1)*i)/2+k];
n=w[((k-1)*k)/2+j];
if(k>i){
m=w[((k-1)*k)/2+i];
}
if(k<j){
n=w[((j-1)*j)/2+k];
}
if(w[((i-1)*i)/2+j]>n+m){
w[((i-1)*i)/2+j]=n+m;
}
}
}
}
输入是n:图形的大小,int [] w:存储在数组中的邻接矩阵。 i和j是下三角矩阵的行数和列数。我不知道为什么我在“ m = w [(((i-1)* i)/ 2 + k];”行继续收到ArrayIndexOutOfBoundsException错误。我的输入是一个n = 5的图,矩阵w是一个包含10个元素的数组。有人知道怎么了吗?还是有人知道如何编写此算法?