Floyd-Warshall algorithm: Difference between revisions

m
→‎{{header|Sidef}}: code simplifications
m (→‎{{header|SequenceL}}: fixing translation link)
m (→‎{{header|Sidef}}: code simplifications)
Line 1,055:
{{trans|Ruby}}
<lang ruby>func floyd_warshall(n, edge) {
var dist = n.of { |i| n.of { |j| i == j  ? 0  : Inf }}
var nxt = n.of { n.of(nil) }
for u,v,w in edge {
Line 1,062:
}
 
for[^n] k* in3 ^n-> cartesian { |k, i, j|
forif (dist[i][j] in> ^ndist[i][k]+dist[k][j]) {
for dist[i][j] in= ^n {dist[i][k]+dist[k][j]
if (distnxt[i][j] >= distnxt[i][k]+dist[k][j]) {
dist[i][j] = dist[i][k]+dist[k][j]
nxt[i][j] = nxt[i][k]
}
}
}
}
 
 
var summary = "pair dist path\n"
for i,j in(^n ~X ^n) {
for i==j in ^n&& {next
var u = i==j && next
var upath = i[u]
while (u != j) var path = [u]{
whilepath << (u != nxt[u][j]) {
path << (u = nxt[u][j])
}
path.map!{|u| u+1 }.join!(" -> ")
summary += ("%d -> %d %4d %s\n" % (i+1, j+1, dist[i][j], path))
}
path.map!{|u| u+1 }.join!(" -> ")
summary += ("%d ->  %d  %4d  %s\n" % (i+1, j+1, dist[i][j], path))
}
 
2,747

edits