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 ] := max int
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 ] /= max int AND dist[ k, j ] /= max int THEN
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 # floydwarshall # ;
END # floyd warshall # ;


[,]INT weights = ( ( 1, 3, -2 )
[,]INT weights = ( ( 1, 3, -2 )