Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

Re^6: traversing a hash looking for path?

by bmann (Priest)
on Apr 20, 2006 at 21:43 UTC ( #544713=note: print w/replies, xml ) Need Help??

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 = ''; my $end = ''; 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.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://544713]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (7)
As of 2021-10-22 10:42 GMT
Find Nodes?
    Voting Booth?
    My first memorable Perl project was:

    Results (85 votes). Check out past polls.