В Perl вы можете представить график с помощью хэша следующим образом:
use warnings;
use strict;
my %graph;
sub add_edge {
my ($n1, $n2) = @_;
$graph{$n1}{$n2} = 1;
$graph{$n2}{$n1} = 1;
}
sub show_edges {
foreach my $n1 (keys %graph) {
foreach my $n2 (keys %{$graph{$n1}}) {
print "$n1 <-> $n2\n";
}
}
}
while (<>) {
my ($n1, $n2) = split /\s+/;
add_edge($n1, $n2);
}
show_edges();
Запустите его так:
perl script.pl input.txt
Для кратчайшего пути вам нужно будет выбратьначальный и конечный узлы, по которым вы хотите искать кратчайший путь.
Для этого вы можете использовать алгоритм Дейкстры.В двух словах, как работает алгоритм:
Давайте назовем начальный узел A и конечный узел B.
Предположим, что мы уже знаем кратчайший путь для перехода от A к B. Еслимы находимся в точке B, тогда возврат к нашим шагам с использованием самого дешевого пути должен вернуть нас к точке A. Алгоритм Дейкстры начинается с A и записывает стоимость пути для перехода ко всем смежным узлам A, а также повторяет процесс для каждого из соседних узлов.узлы.После этого мы можем напечатать кратчайший путь от A до B, вернувшись назад от B к A.
Чтобы получить количество узлов: print keys %graph;
Чтобы получить количество ребер, которые вы должны посчитать (однозначно) количество записей в каждом из элементов хеша, например для подсчета количества ребер для одного узла: print keys %{$graph{'ATF-1'}};