Perl Monk, Perl Meditation PerlMonks

### Re: to find inter-connected items

by Athanasius (Chancellor)
 on Nov 05, 2012 at 04:43 UTC ( #1002273=note: print w/replies, xml ) Need Help??

in reply to to find inter connected items

This is an interesting problem. choroba’s excellent solution can be simplified somewhat by using the Set::Scalar module:

```#! perl
use strict;
use warnings;
use Set::Scalar;

my @a = (1, 1, 2, 3, 4, 4, 8,  8);
my @b = (3, 4, 3, 5, 6, 7, 9, 10);
my @sets;
@a == @b or die "The arrays are of different lengths.\n";

for (0 .. \$#a)
{
my (\$ai, \$bi, \$found) = (\$a[\$_], \$b[\$_], 0);

for (@sets)
{
if (\$_->has(\$ai) || \$_->has(\$bi))
{
\$found = 1;
\$_->insert(\$ai, \$bi);
last;
}
}

push @sets, Set::Scalar->new(\$ai, \$bi) unless \$found;
}

OUTER: for my \$i (reverse 1 .. \$#sets)
{
for my \$j (reverse 0 .. \$i - 1)
{
unless (\$sets[\$i]->intersection(\$sets[\$j])->is_empty())
{
\$sets[\$j] = \$sets[\$j]->union(\$sets[\$i]);
splice(@sets, \$i, 1);
redo OUTER;
}
}
}

print "\$_\n" for @sets;
[download]```

Update: Added block labelled OUTER to merge sets having common elements.

Output:

```14:35 >perl 366_SoPW.pl
(1 2 3 4 5 6 7)
(10 8 9)

14:36 >
[download]```

Hope that helps,

Athanasius <°(((><contra mundum

Log In?
 Username: Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1002273]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2018-06-20 04:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Should cpanminus be part of the standard Perl release?

Results (116 votes). Check out past polls.

Notices?