Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

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 = '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.


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

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (5)
As of 2014-09-02 04:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (20 votes), past polls