这是我实现Floyd算法的代码。如何更改此算法以解决此问题: 找到顶点i和j之间的最小距离,它们之间最多有S个顶点。
void Floyd_Warshal(int graph[MAX][MAX], int D[MAX][MAX], int P[MAX][MAX], int numberOfNodes){
for(int i = 0 ; i < numberOfNodes ; i++)
for(int j = 0 ; j < numberOfNodes ; j++){
D[i][j] = graph[i][j];
P[i][j] = -1;
}
for(int k = 0 ; k < numberOfNodes ; k++)
for(int i = 0 ; i < numberOfNodes ; i++)
for(int j = 0 ; j < numberOfNodes ; j++)
if(D[i][j] > D[i][k] + D[k][j]){
D[i][j] = D[i][k] + D[k][j];
P[i][j] = k;
}
}
答案 0 :(得分:1)
#!/usr/bin/env perl
use strict;
use warnings;
my @files = <*>;
my @extensions = map { my ($f) = m/\.(.*?)$/; $f; } @files;
my @unique_ext;
my %seen;
foreach my $value (@extensions) {
if (! $seen{$value}) {
push @unique_ext, $value;
$seen{$value} = 1;
}
}
use Data::Dumper;
foreach my $current (@unique_ext)
{
my $start = 'aaaaaa';
my @file_list = <*$current>;
foreach my $file (@file_list)
{
rename $file, "$start.$current";
$start ++;
}
}
上的 Bellman-Ford algorithm(不使用当前迭代中找到的路径的略微修改后的版本)可以找到最多使用$ ls
LKG.JPG jlgaej.gif owutljff.JPG uoeoo.jpg
$ perl rename.pl
$ ls
aaaaaa.JPG aaaaaa.gif aaaaaa.jpg aaaaaa.pl aaaaab.JPG
条边的所有最短路径。 Floyd-Warshall算法不是解决这类问题的合适方法。
您也可以修改Dijksta's algorithm,但需要更改图表。修改后的图形将包含i
个顶点(对于每个顶点和每个可能的路径长度)。这个answer详细解释了图形结构。