32 lines
658 B
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
|