Java 所有对最短路径Udaya-Kumar Redd算法
使用本文第4页的算法, 我试图计算一个所有对的最短路径矩阵 我被第7行和第8行(算法)以及随后的第11行和第12行弄糊涂了, 因为给s1赋值j并同时使用这两个 在我看来,第8行的比较似乎模棱两可。我是 想知道我是否读错了缩进。 我不熟悉算法,所以请耐心等待Java 所有对最短路径Udaya-Kumar Redd算法,java,algorithm,graph,shortest-path,Java,Algorithm,Graph,Shortest Path,使用本文第4页的算法, 我试图计算一个所有对的最短路径矩阵 我被第7行和第8行(算法)以及随后的第11行和第12行弄糊涂了, 因为给s1赋值j并同时使用这两个 在我看来,第8行的比较似乎模棱两可。我是 想知道我是否读错了缩进。 我不熟悉算法,所以请耐心等待 while(flag != false){ for(int i=0; i<n;i++){ aMin = Integer.MAX_VALUE; bMin = Int
while(flag != false){
for(int i=0; i<n;i++){
aMin = Integer.MAX_VALUE;
bMin = Integer.MAX_VALUE;
for(int j=0; j<n;j++){
// Line 7 of the algorithm
if((distanceMatrix[i][j] < aMin) && (j != i) && (BR[i][j] == false)){
aMin = distanceMatrix[i][j];
BR[i][j] = true;
a[i] = j;
int s1 = j; // End of line 7
// Line 8 of the algorithm
if(distanceMatrix[i][j] < distanceMatrix[i][s1])
BR[i][s1] = false; // End of line 8
}
}
for(int j=0; j<n; j++){
// Line 11 of the algorithm
if((distanceMatrix[i][j] < bMin) && (j != i) && (j != a[i]) && (BR[i][j] == false)){
bMin = distanceMatrix[i][j];
BR[i][j] = true;
b[i] = j;
int s2 = j; // end of line 11
// Line 12 of the algorithm
if(distanceMatrix[i][j] < distanceMatrix[i][s2])
BR[i][s2] = false; // end of line 12
}
}
}
for(int i=0; i <n; i++){
for(int j=0; j<n; j++){
int t1 = distanceMatrix[i][a[i]] + distanceMatrix[a[i]][j];
int t2 = distanceMatrix[i][b[i]] + distanceMatrix[b[i]][j];
distanceMatrix[i][j] = Math.min(distanceMatrix[i][j], Math.min(t1,t2));
distanceMatrix[j][i] = distanceMatrix[i][j];
}
}
flag = true;
for(int i=0; i<n;i++){
// Line 19 of the algorithm
for(int j=0; j<n; j++){
temp[i][j] = distanceMatrix[i][j]; // end of line 19
// Line 20 of the algorithm
if (distanceMatrix[i][j] == temp[i][j])
flag = false; // end of line 20
}
}
}
while(标志!=false){
对于(int i=0;i我认为应该是这样的:
4) for i ← 1 to n do amin← ∞ ; bmin ← ∞
5) for j ← 1 to n do
6) if D[i, j] < amin and j = i and BR[i, j] = 0 then
7) amin ← D[i, j] ; BR[i, j] ← 1 ; a[i] ← j ; s1 ← j
8) if D[i, j] < D[i, s1] then BR[i, s1] ← 0
4)用于i← 1到n多阿明← ∞ ; bmin← ∞
5) 对于j← 1比n做
6) 如果D[i,j]
如你所见,s1
可能并不总是j
:它总是我认为应该是这样的:
4) for i ← 1 to n do amin← ∞ ; bmin ← ∞
5) for j ← 1 to n do
6) if D[i, j] < amin and j = i and BR[i, j] = 0 then
7) amin ← D[i, j] ; BR[i, j] ← 1 ; a[i] ← j ; s1 ← j
8) if D[i, j] < D[i, s1] then BR[i, s1] ← 0
4)用于i← 1到n多阿明← ∞ ; bmin← ∞
5) 对于j← 1比n做
6) 如果D[i,j]
因此,正如您所看到的,s1
可能并不总是j
:它总是,谢谢您的帮助。如果是这样的话,那么我猜s1在用于If语句之前需要进行初始化,但是本文没有说明这个值实际上是什么或应该是什么。您是否碰巧了解关于这个?s1=i,也许?@user1491153-我会用-1
初始化它,并在触发第二个if
之前检查它是否s1!=-1
。谢谢你的帮助。如果是这样的话,我想s1需要在if语句中使用之前进行初始化,但是本文没有说明这个值是什么e实际上是或应该是什么。你对这个有了解吗?s1=i,也许?@user1491153-我会用-1
初始化它,并在触发第二个if
之前检查s1!=-1
。