RosettaCodeData/Task/Floyd-Warshall-algorithm/Tcl/floyd-warshall-algorithm.tcl

32 lines
658 B
Tcl

package require Tcl 8.5 ;# for {*} and [dict]
package require struct::graph
package require struct::graph::op
struct::graph g
set arclist {
a b
a p
b m
b c
c d
d e
e f
f q
f g
}
g node insert {*}$arclist
foreach {from to} $arclist {
set a [g arc insert $from $to]
g arc setweight $a 1.0
}
set paths [::struct::graph::op::FloydWarshall g]
set paths [dict filter $paths key {a *}] ;# filter for paths starting at "a"
set paths [dict filter $paths value {[0-9]*}] ;# whose cost is not "Inf"
set paths [lsort -stride 2 -index 1 -real -decreasing $paths] ;# and print the longest first
puts $paths