gpt4 book ai didi

perl - Perl 中的 Kevin Bacon 六度

转载 作者:行者123 更新时间:2023-12-02 06:12:02 25 4
gpt4 key购买 nike

首先,是的,这是我的 Perl 类(class)的作业项目。我不是在寻找答案(尽管那会很好)。据我了解,我需要使用 BFS 和正则表达式来组织我的数据以供使用。我需要一些关于这方面的指导。如何使用 BFS?我是否使用大量堆栈并遍历堆栈中的每个项目?我应该使用一个巨大的哈希表吗?有没有人解决过这个问题?你是怎么做到的?我只需要一些方向就够了。这类似于 BST 吗?如果不使用图形模块,这可能吗?这可能使用哈希值吗?

最佳答案

参见 Graph .

#!/usr/bin/perl

use autodie;
use strict; use warnings;

use Graph;
use Graph::TransitiveClosure::Matrix;

my $dat = 'kevin-bacon.dat';

my $kbg = Graph->new(undirected => 1);

open my $kbf, '<', $dat;

my %movies;

while ( my $line = <$kbf> ) {
last unless $line =~ /\S/;
chomp $line;
my ($u, $m, $v) = split /;/, $line;
$kbg->add_edge($u, $v);
$movies{"$u|$v"} = $movies{"$v|$u"} = $m;
}

my $tcm = Graph::TransitiveClosure::Matrix->new($kbg,
path_length => 1,
path_vertices => 1,
);

my ($u, $v) = ('Kevin Bacon', 'Yelena Maksimova');

if ( my $n = $tcm->path_length($u, $v) ) {
printf "%d degrees of separation between %s and %s\n", $n, $u, $v;
}

my @path = $tcm->path_vertices($u, $v);

for my $i ( 0 .. @path - 2 ) {
my ($u, $v) = @path[$i, $i + 1];
print qq{$u - $v: $movies{"$u|$v"}\n};
}

使用来自 Boost 项目的 kevin-bacon.dat:

3 degrees of separation between Kevin Bacon and Yelena MaksimovaKevin Bacon - Elisabeth Shue: Hollow Man (2000)Elisabeth Shue - Lev Prygunov: Saint, The (1997)Lev Prygunov - Yelena Maksimova: Bezottsovshchina (1976)

关于perl - Perl 中的 Kevin Bacon 六度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1685063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com