Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,27 @@
|
|||
sub Floyd-Warshall (Int $n, @edge) {
|
||||
my @dist = [0, |(Inf xx $n-1)], *.Array.rotate(-1) … !*[*-1];
|
||||
my @next = [0 xx $n] xx $n;
|
||||
|
||||
for @edge -> ($u, $v, $w) {
|
||||
@dist[$u-1;$v-1] = $w;
|
||||
@next[$u-1;$v-1] = $v-1;
|
||||
}
|
||||
|
||||
for [X] ^$n xx 3 -> ($k, $i, $j) {
|
||||
if @dist[$i;$j] > my $sum = @dist[$i;$k] + @dist[$k;$j] {
|
||||
@dist[$i;$j] = $sum;
|
||||
@next[$i;$j] = @next[$i;$k];
|
||||
}
|
||||
}
|
||||
|
||||
say ' Pair Distance Path';
|
||||
for [X] ^$n xx 2 -> ($i, $j){
|
||||
next if $i == $j;
|
||||
my @path = $i;
|
||||
@path.push: @next[@path[*-1];$j] until @path[*-1] == $j;
|
||||
printf("%d → %d %4d %s\n", $i+1, $j+1, @dist[$i;$j],
|
||||
@path.map( *+1 ).join(' → '));
|
||||
}
|
||||
}
|
||||
|
||||
Floyd-Warshall(4, [[1, 3, -2], [2, 1, 4], [2, 3, 3], [3, 4, 2], [4, 2, -1]]);
|
||||
Loading…
Add table
Add a link
Reference in a new issue