说明: 在(14,13,12,11)
14 comes before 12 so arr1 condition met.
13 comes before 12 so arr2 condition met
13 comes before 11 so arr 3 condition met
14 comes before 13 and 13 comes before 11, so arr 4 condition met.
我正在考虑将我的新数组作为(14,12)即arr1元素启动,然后检查下一个数组是否有任何匹配元素,但它不起作用。请帮忙。
答案 0 :(得分:0)
我认为您所要求的是基于topological sort的partial orderings。 Unix有一个名为tsort
的内置应该可以做你想要的。
如果你想要自己的Perl实现,那么这个怎么样?
my @A = (
[14, 12],
[13,12],
[13,11],
[14,13,11]
);
my @final;
my %seen;
my $c;
do{
$c = 0;
foreach my $a (@A){
my $elt = shift @$a;
next if ! defined $elt || $seen{$elt}++;
push( @final, $elt );
$c++;
}
}while( $c );
print join(',', @final) . "\n";