perl - Graph.pm - 如何获得具有特定长度的所有路径?
问题描述
我有以下带有 9 条边的示例图:
假设图是无向的,每条边的权重为 1。
我们可以使用Graph.pm以编程方式将其描述为
use Graph::Undirected;
my $g = Graph::Undirected->new; # An undirected graph.
$g->add_edge(1, 3);
$g->add_edge(3, 4);
$g->add_edge(4, 2);
$g->add_edge(1, 2);
$g->add_edge(1, 5);
$g->add_edge(1, 2);
$g->add_edge(1, 6);
$g->add_edge(6, 2);
$g->add_edge(2, 7);
如何获取从顶点1
到2
长度为 2 的所有路径?
我在Graph.pm中没有找到任何方法:(
在我的示例中,它必须返回 2 条路径,[ 1, 5, 2 ]
并且[ 1, 6, 2 ]
解决方案
与我的正确定义相比,您的边缘设置中有错误。
use Graph::Undirected;
my $g = Graph::Undirected->new;
$g->add_edge(1, 2);
$g->add_edge(1, 3);
$g->add_edge(1, 5);
$g->add_edge(1, 6);
$g->add_edge(2, 7);
$g->add_edge(3, 4);
$g->add_edge(4, 2);
$g->add_edge(5, 2);
$g->add_edge(6, 2);
for my $neighbour_of_v1 ($g->neighbours(1)) {
next if 2 == $neighbour_of_v1; # direct neighbour, path is too short
for my $neighbour_of_neighbour_of_v1 ($g->neighbours($neighbour_of_v1)) {
next if 1 == $neighbour_of_neighbour_of_v1; # ignore backlink to start
say "1-$neighbour_of_v1-$neighbour_of_neighbour_of_v1"
if 2 == $neighbour_of_neighbour_of_v1;
}
}
__END__
1-5-2
1-6-2
推荐阅读
- angular - Angular dom-to-image 如何连续加载图像?
- highcharts - 防止 Highchart.js 切割 xAxis 标签
- python - 如果进程已经在运行,Python-Flask 设置队列
- r - 如何使用 AnnotationHub 或 R 中的类似方法注释与参考基因组的基因相关的感兴趣的基因组区域?
- identityserver4 - Identityserver4 和 Redis 缓存不是线程安全的?
- graphql - 带有批量查询的模式拼接 postgraphile 服务
- python - 如何在 discord.py 中的 on_ready 完成之前忽略消息
- r - geom_raster_interactive 中的工具提示未返回正确的值
- eclipse - Azure Tookit for Eclipse 按钮不起作用
- css - 使用 Prettier 和 Stylelint 规则格式化 SCSS/CSS/LESS