【问题标题】:Graph.pm - how to get all paths with particular length?Graph.pm - 如何获得具有特定长度的所有路径?
【发布时间】:2019-10-22 06:22:52
【问题描述】:

我有以下带有 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 ]

【问题讨论】:

标签: perl graph


【解决方案1】:

您的边缘设置存在错误,请与我的正确定义进行比较。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多