Dear Limbic,
I tried the following graph and predertimined start and position in code
below. But why It gives empty result?
Please refer to the visualization of the graph here (http://graph.gafol.net/cESwUMeNd) .
my %graph2 = (
'read145404_1' => [
'read231054_2',
'read250449_2'
],
'read250449_2' => [
'read359463_1',
'read691358_1',
'read937013_1'
],
'read231054_2' => [
'read691358_1',
'read359463_1',
'read937013_1'
]
);
my $routes = find_paths('read145404_1', 'read691358_1', \%graph2);
sub find_paths {
my ($beg, $end, $graph) = @_;
my $n;
my %node_to_int = map {$_ => $n++} keys %graph;
my (@work, @solution);
for (@{$graph->{$beg}}) {
if ($_ eq $end) {
push @solution, "$beg->$end";
next;
}
my $seen = '';
vec($seen, $node_to_int{$_}, 1) = 1;
vec($seen, $node_to_int{$beg}, 1) = 1;
push @work, ["$beg->$_", $_, $seen];
}
while (@work) {
my $item = pop @work;
my ($path, $curr, $seen) = @$item;
for my $node (@{$graph->{$curr}}) {
my $bit = $node_to_int{$node};
next if vec($seen, $bit, 1);
if ($node eq $end) {
push @solution, "$path $end";
next;
}
my $new_seen = $seen;
vec($new_seen, $bit, 1) = 1;
push @work, ["$path->$node", $node, $new_seen];
}
}
# Return
print Dumper \@solution;
return \@solution;
}
---
neversaint and everlastingly indebted.......
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.