Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask

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.

Comment on Re^6: traversing a hash looking for path?
Select or Download Code

Log In?

What's my password?
Create A New User
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 examining the Monastery: (7)
As of 2015-11-30 01:54 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (756 votes), past polls