创建由节点列表引起的图的子图

时间:2012-01-04 15:26:05

标签: perl subgraph

我目前正在使用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),或者我应该修补Graph,还是每个人自己编写图表类,我也应该这样做?

2 个答案:

答案 0 :(得分:2)

所以我把这个问题的代码发布到了github(有10个单元测试)。

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

我很欣赏批评,错误报告和更多测试用例。希望有一天它能进入主模块。

更新:现在可以通过CPAN:Graph::Subgraph获得。但上段仍然有效。

答案 1 :(得分:0)

如果你有一个所有顶点列表和你想要的顶点列表,那么计算两者之间的集合差异并使用

$graph->delete_vertices(@unwanted_vertices);

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