Thanks all. So after introducing corrections suggested by you,I achieved at this code below. It operates on the same data file and outputs the connected components.But the problem is that the last part of the code i.e. the connected components part isnt working well.
If I enable "use strict" i get this error :- "Can't use string ("c") as an ARRAY ref while "strict refs" in use at arrar_input.pl line 44, <> line 3."
Line 44 being this "for my $tgt ( \@{ $h{$src} } ) {"
Whereas if I disable "use strict" i get incomplete output for the connected components as :
----connected components---------------
- d: []
- a: []
b: []
The correct output should be this
----connected components---------------
- d: [e]
- a: [c]
b: [c]
My second question is that how can I access each of these connected components separately as per my need(i.e. either of them).
#This program read the triplets from file named "data" into
#an array of array.
#use strict;
use warnings;
use Data::Dumper;
use Graph;
use Graph::Subgraph;
# use PDL;
my @S;
while (<>) {
push @S, [ split ];
}
print "#########TRIPLETS#####\n";
print Dumper \@S;
print "\n$S[0][1]\n";
# Find the number of vertices
my @L;
for my $i ( 0 .. $#S ) {
for my $j ( 0 .. $#{ $S[$i] } ) {
#print "elt $i $j is $S[$i][$j]\n";
push (@L,$S[$i][$j]);
}
}
my %seen;
@L = grep { ! $seen{ $_ }++ } @L;
print "########VERTICES##########\n";
print Dumper \@L;
# Now lets generate the G(L)
# In order to generate the G(L) we'll extract first two columns of S i
+nto another matrix
my @GL=@S;
splice(@$_, 2, 1)
foreach @GL;
print Dumper \@GL;
my %h = map { $_->[0] => $_->[1] } @S;
print Dumper(\%h);
##### CONNECTED COMPONENTS ##########
my $g = Graph->new( undirected => 1 );
for my $src ( keys %h ) {
for my $tgt ( \@{ $h{$src} } ) {
$g->add_edge($src, $tgt);
}
}
my @subgraphs = $g->connected_components;
my @allgraphs;
my $V = $g->vertices;
print "\n$V\n";
for my $subgraph ( @subgraphs ) {
push @allgraphs, {};
for my $node ( @$subgraph ) {
if ( exists $h{ $node } ) {
$allgraphs[-1]{$node} = [ @{ $h{$node} } ];
}
}
}
print "----connected components------------";
use YAML; print Dump \@allgraphs;
|