В настоящее время я использую 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
поведение документированы, однако, как источник Graph показывает, что он скопирует атрибуты, но не вершины/ребра.Там уже запрос функции на CPAN: https://rt.cpan.org/Ticket/Display.html?id=65497
Итак, есть ли какой-либо другой модуль (возможно, XS), или я должен исправить Graph
, или каждый пишет себе класс графа, и я должен делать это тоже?
Хм, это должно быть лучшим решением, когда '$ graph-> edge' <<' $ subgraph-> nodes ** 2'. Тем не менее, я все же предпочел бы скопировать исходный граф и не испортить его. – Dallaylaen