作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想找到从源到汇的所有路径。预期的:
(3 11 17 24 32 39 45)
(3 11 18 26 33 39 45)
(3 11 18 26 33 40 46)
(3 11 18 26 33 40 47)
(3 11 19 27 33 39 45)
(3 11 19 27 33 40 46)
(3 11 19 27 33 40 47)
(3 11 19 27 34 40 46)
(3 11 19 27 34 40 47)
(6 12 20 27 33 39 45)
(6 12 20 27 33 40 46)
(6 12 20 27 33 40 47)
(6 12 20 27 34 40 46)
(6 12 20 27 34 40 47)
use 5.028;
use feature 'signatures';
use strictures;
use Graph qw();
my $g = Graph->new(directed => 1);
for my $edge_tuple (qw(
3-11 6-12 11-17 11-18 11-19 12-20 17-24 18-26 19-27 20-27 24-32 26-33
27-33 27-34 32-39 33-39 33-40 34-40 39-45 40-46 40-47
)) {
my ($from, $to) = split '-', $edge_tuple;
$g->add_edge($from, $to);
}
say join ';', $g->source_vertices;
say join ';', $g->sink_vertices;
sub visit($g, $v, $p) {
push @$p, $v;
if ($g->is_sink_vertex($v)) {
return;
} else {
for my $s ($g->successors($v)) {
visit($g, $s, $p)
}
}
}
my $p = [];
for my $v ($g->source_vertices) {
visit($g, $v, $p);
}
use Data::Dumper; say Dumper $p;
最佳答案
我修改了您的代码以将部分路径传递到 visit()
还有visit()
从提供的部分路径返回所有可能的完整路径:
sub visit($g, $path) {
my $v = $path->[-1];
if ($g->is_sink_vertex($v)) {
return $path;
} else {
my @more;
for my $s ($g->successors($v)) {
push @more, visit($g, [ @$path, $s ])
}
return @more;
}
}
my @p;
for my $v ($g->source_vertices) {
push @p, visit($g, [$v]);
}
use Data::Dumper; say Dumper @p;
sub visit($g, $path) {
my $v = $path->[-1];
if ($g->is_sink_vertex($v)) {
return $path;
} else {
return map { visit($g, [ @$path, $_ ]) } $g->successors($v);
}
}
my @p = map { visit($g, [$_]) } $g->source_vertices;
关于perl - 如何在有向图中找到从源到汇的所有路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52919516/
我是一名优秀的程序员,十分优秀!