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;
};

ノート:

  • 動作は文書化され$Graph->newていませんが、グラフのソースが示すように、属性はコピーされますが、頂点/エッジはコピーされません。

  • CPAN にはすでに機能リクエストがあります: https://rt.cpan.org/Ticket/Display.html?id=65497

それで、他のモジュール(おそらくXS)がありますか、Graphそれともパッチを当てる必要がありますか?

4

2 に答える 2

2

そこで、質問のコードをgithubに投稿しました(約10個の単体テストを使用)。

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

批評、バグレポート、その他のテストケースをいただければ幸いです。いつかメインモジュールに入ることを願っています。

更新: CPAN経由で利用可能になりました:Graph::Subgraph。それでも、上記の段落はまだ当てはまります。

于 2012-03-10T07:36:34.017 に答える
0

すべての頂点のリストと必要な頂点のリストがある場合は、2 つのセットの差を計算して使用します。

$graph->delete_vertices(@unwanted_vertices);

以前、このようなものを使用して、大きなグラフを切り詰めました。

于 2012-01-05T01:17:25.333 に答える