- 论坛徽章:
- 8
|
本帖最后由 xiumu2280 于 2014-10-23 14:37 编辑
- my %family;
- while (<DATA>) {
- chomp;
- my @person = split /;|\s+/;
- my $son = pop @person;
-
- $family{$_}{$son} = 1 for @person;
- }
- my @all_data;
- for my $person ( sort keys %family ) {
- my @team;
- _repeat ($person,\%family,\@team);
- }
- @all_data = _uniq(@all_data);
- for my $f (@all_data) {
- print +(join "->",@{$f})."\n";
- }
- sub _repeat {
- my ($goal,$family,$team) = @_;
- my %hash = %{$family};
- my @t = @{$team};
- if ($hash{$goal}) {
- push @t,$goal;
- for my $key (keys %{$hash{$goal}}) {
- _repeat($key,$family,\@t);
- }
- }else{
- push @t,$goal;
- push @all_data,[@t];
- return;
- }
- }
- sub _uniq {
- my @data = @_;
- for my $n (0..$#data) {
- my $arr = $data[$n];
- for my $array (@data) {
- if (defined $array && scalar(@$arr) < scalar(@$array)) {
- my %uniq;
- @uniq{@$arr}=@$arr;
- my @uni = grep{$uniq{$_}}@$array;
- if (@uni == @$arr) {
- undef ($data[$n]);
- }
- }
- }
- }
- @data = grep {defined}@data;
- return @data;
- }
- __DATA__
- A B
- B;C;D E
- B C
- B;E F
- C;G I
- I;J;B K
- C J
复制代码 这个东东,还是有点意思啊··
写到一半,mark一下。- A->B->C->J->K
- A->B->C->I->K
- A->B->C->E->F
- D->E->F
- G->I->K
复制代码 我想问下
A->B->C->I;J->K
A->B->C->E->F
是如何取舍的?取元素最多那个?
|
|