1

我目前正在使用Graph,但是它缺少一种方法来创建由给定顶点列表引起的原始图的子图。

我写了一个存根,它使用 Graph 的访问器,但是

这是我的代码:

# subgraph ($graph, @node_list); 
# return subgraph (with the same setup) 
# induced by node list
sub subgraph {
    my $self = shift;
    my $new = $self->new;
    my @edges;
    foreach my $v(@_) {
        $self->has_vertex($v) or next;
        $new->add_vertex($v);
        foreach my $u(@_) {
            $self->has_edge($u, $v) and push @edges, $u, $v;
        };
    };
    $new->add_edges(@edges);
    return $new;
};

笔记:

那么,是否有其他模块(可能是 XS),或者我应该 patch Graph,还是每个人自己编写一个图形类,我也应该这样做?

4

2 回答 2

2

所以我已经将问题中的代码发布到了 github(大约有 10 个单元测试)。

https://github.com/dallaylaen/perl-Graph-Subgraph

我将不胜感激批评、错误报告和更多测试用例。希望有一天它会进入主模块。

更新:现在可通过 CPAN 获得:Graph::Subgraph。然而,上述段落仍然成立。

于 2012-03-10T07:36:34.017 回答
0

如果您有所有顶点的列表和所需的顶点列表,则计算两者之间的集差并使用

$graph->delete_vertices(@unwanted_vertices);

我以前用过这样的东西来修剪一个大图。

于 2012-01-05T01:17:25.333 回答