Jump to content

Dijkstra's algorithm: Difference between revisions

m
→‎{{header|Perl}}: use True not '1', some additional fiddling
m (→‎{{header|REXX}}: added whitespace.)
m (→‎{{header|Perl}}: use True not '1', some additional fiddling)
Line 3,671:
<lang perl>use strict;
use warnings;
use constant True => 1;
 
sub add_edge {
Line 3,685 ⟶ 3,686:
while ($i <= $j) {
my $k = int(($i + $j) / 2);
if ($a->[$k]{dist} >= $v->{dist}) { $j = $k - 1 }
else { $ji = $k -+ 1; }
}
else {
$i = $k + 1;
}
}
splice @$a, $i, 0, $v;
Line 3,698 ⟶ 3,695:
my ($g, $a, $b) = @_;
for my $v (values %$g) {
$v->{dist} = 999999910e7; # arbitrary large value
delete $v->{prev};
delete $v->{visited};
Line 3,705 ⟶ 3,702:
my $h = [];
push_priority($h, $g->{$a});
while (1) {
my $v = shift @$h;
last if !$v ||or $v->{name} eq $b;
$v->{visited} = 1True;
for my $e (@{$v->{edges}}) {
my $u = $e->{vertex};
Line 3,721 ⟶ 3,718:
 
my $g = {};
add_edge($g, "a",@$_) "b", 7);for
(['a', 'b', 7], ['a', 'c', 9], ['a', 'f', 14],
add_edge($g, "a", "c", 9);
['b', 'c', 10], ['b', 'd', 15], ['c', 'd', 11],
add_edge($g, "a", "f", 14);
['c', 'f', 2], ['d', 'e', 6], ['e', 'f', 9]);
add_edge($g, "b", "c", 10);
 
add_edge($g, "b", "d", 15);
add_edgedijkstra($g, "c"'a', "d", 11'e');
 
add_edge($g, "c", "f", 2);
add_edge($g, "d", "e", 6);
add_edge($g, "e", "f", 9);
dijkstra($g, "a", "e");
my $v = $g->{e};
my @a;
 
while ($v) {
push @a, $v->{name};
$v = $v->{prev};
}
my $path = join ""'', reverse @a;
print "$g->{e}{dist} $path\n";</lang>
{{out}}
 
output:
 
<pre>26 acde</pre>
 
2,392

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.