Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2
graph-traverse.pl
#!/usr/local/bin/perl -w
# graph-traverse.pl -- Traversiert einen zusammenhaengenden Graphen.
sub depth_first_search {
my $node = shift;
return if exists $node->{'DFSVISITED'};
$node->{'DFSVISITED'} = 1;
if (exists $node->{'NEXT'}) {
foreach my $neigh ( map { $_->{'NEIGH'} }
@{$node->{'NEXT'}} ) {
depth_first_search($neigh);
}
}
proceed($node->{'VALUE'});
}
sub breadth_first_search {
my $node = shift;
my @queue = ();
$node->{'BFSVISITED'} = 1;
proceed($node->{'VALUE'});
push(@queue, map { $_->{'NEIGH'} } @{$node->{'NEXT'}});
while (defined ($node = shift @queue)) {
next if exists $node->{'BFSVISITED'};
$node->{'BFSVISITED'} = 1;
proceed($node->{'VALUE'});
push(@queue, map { $_->{'NEIGH'} } @{$node->{'NEXT'}});
}
}
sub create_undirected_weighted_graph {
my $net;
while (<DATA>) {
chomp;
next if /^\s*#/;
($from, $to, $cost) = split(/:\s*/);
$net->{$from} = {} unless exists $net->{$from};
$net->{$to} = {} unless exists $net->{$to};
$net->{$from}->{'VALUE'} = "$from"
unless exists $net->{$from}->{'VALUE'};
$net->{$to}->{'VALUE'} = "$to"
unless exists $net->{$to}->{'VALUE'};
$net->{$from}->{'NEXT'} = []
unless exists $net->{$from}->{'NEXT'};
$net->{$to}->{'NEXT'} = []
unless exists $net->{$to}->{'NEXT'};
push(@{$net->{$from}->{'NEXT'}},
{ NEIGH => $net->{$to}, COST => $cost });
push(@{$net->{$to}->{'NEXT'}},
{ NEIGH => $net->{$from}, COST => $cost });
}
return $net;
}
sub proceed {
my $value = shift;
print "($value)";
}
my $net = create_undirected_weighted_graph();
print "Starting from where? "; chomp($start = <STDIN>);
print "DFS-Traversal: ";
depth_first_search($net->{$start});
print "\n";
print "BFS-Traversal: ";
breadth_first_search($net->{$start});
print "\n";
__DATA__
# A F
# \3 1 2 5/
# C ------- D -------- E
# /3 5\
# B G
D: C: 1
D: E: 2
C: A: 3
C: B: 3
E: F: 5
E: G: 5
[Prev] [Up] [Relevant Chapter] [Next]
[Alte Quelle]
| Last modified: $Date: 2006/05/18 12:55:57 $ FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy |
|