in reply to Re^3: How to save first two columns of an array into another array
in thread How to save first two columns of an array into another array
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 :
The correct output should be this----connected components--------------- - d: [] - a: [] b: []
My second question is that how can I access each of these connected components separately as per my need(i.e. either of them).----connected components--------------- - d: [e] - a: [c] b: [c]
#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;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: How to save first two columns of an array into another array
by Athanasius (Archbishop) on Oct 03, 2012 at 03:38 UTC |