Floyd-Warshall algorithm: Difference between revisions
Content added Content deleted
(Added Algol 68) |
m (→{{header|ALGOL 68}}: As the data is REAL, use max real for infinity, not max int) |
||
Line 409: | Line 409: | ||
PROC floyd warshall = ( [,]INT weights, INT num vertices )VOID: |
PROC floyd warshall = ( [,]INT weights, INT num vertices )VOID: |
||
BEGIN |
BEGIN |
||
REAL infinity = max real; |
|||
[ 0 : num vertices - 1, 0 : num vertices - 1 ]REAL dist; |
[ 0 : num vertices - 1, 0 : num vertices - 1 ]REAL dist; |
||
FOR i FROM LWB dist TO 1 UPB dist DO |
FOR i FROM LWB dist TO 1 UPB dist DO |
||
FOR j FROM 2 LWB dist TO 2 UPB dist DO |
FOR j FROM 2 LWB dist TO 2 UPB dist DO |
||
dist[ i, j ] := |
dist[ i, j ] := infinity |
||
OD |
OD |
||
OD; |
OD; |
||
Line 432: | Line 435: | ||
FOR i FROM 1 LWB dist TO 1 UPB dist DO |
FOR i FROM 1 LWB dist TO 1 UPB dist DO |
||
FOR j FROM 2 LWB dist TO 2 UPB dist DO |
FOR j FROM 2 LWB dist TO 2 UPB dist DO |
||
IF dist[ i, k ] /= |
IF dist[ i, k ] /= infinity AND dist[ k, j ] /= infinity THEN |
||
IF dist[ i, k ] + dist[ k, j ] < dist[ i, j ] THEN |
IF dist[ i, k ] + dist[ k, j ] < dist[ i, j ] THEN |
||
dist[ i, j ] := dist[ i, k ] + dist[ k, j ]; |
dist[ i, j ] := dist[ i, k ] + dist[ k, j ]; |
||
Line 443: | Line 446: | ||
print result( dist, nxt ) |
print result( dist, nxt ) |
||
END # |
END # floyd warshall # ; |
||
[,]INT weights = ( ( 1, 3, -2 ) |
[,]INT weights = ( ( 1, 3, -2 ) |