in reply to Re^5: traversing a hash looking for path?
in thread traversing a hash looking for path?
Hi limbic~region,
I would have done it something like this:
my %net = ( ... ); my $start = '1.2.3.4'; my $end = '1.2.3.6'; print find_pathr( \%net, $end, $start ) . "\n"; sub find_pathr { my ( $net, $end, @list ) = @_; my $curr; do { $curr = shift @list; } until ( ! @list or exists $$net{ $curr } ); return "No path!" unless exists $$net{$curr}; return $end if $curr eq $end; unshift @list, @{ delete $$net{ $curr } }; return "$curr->" . find_pathr( $net, $end, @list ); }
Now this quick implementation isn't perfect. It doesn't pretend to find the most efficient path, it finds the first path based on the order of the elements of %net. It is destructive to %net. I don't like the do ... until loop.
But I do think it is an elegant solution, IMNSHO ;)
Update: This is a depth-first search, not breadth-first as is limbic~region's.
|
---|
In Section
Seekers of Perl Wisdom