Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

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
Node Status?
node history
Node Type: note [id://544713]
[erix]: that's bad... I can only wish you good luck
[Discipulus]: not even in Canada is easy to find a decent job
Discipulus was a question
[GotToBTru]: current job found me
Discipulus is so lucky to have a decent job, with old, favorable contract, done before the ultralibersm arrived in Eataly

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (9)
As of 2017-05-23 19:15 GMT
Find Nodes?
    Voting Booth?