Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^3: Finding subgraphs induced by a set of given vertices.

by Anonymous Monk
on Oct 04, 2012 at 02:48 UTC ( #997164=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Finding subgraphs induced by a set of given vertices.
in thread Finding subgraphs induced by a set of given vertices.

You say you want to return instead of print?

Think about that for a minute, return instead of print

Hmm, how to return instead of print?

Write return instead of print?

Hmm, yes, write return instead of print, replace print with return, yes, I think that is it :)

But there is a problem with returning instead of printing -- there can be more than one matching triplet , so by returning you only get the first matching triplet

#!/usr/bin/perl -- use strict; use warnings; use Data::Dump qw/ pp /; Main(@ARGV); exit(0); #~ sub DEBUG(){} # disable debugging sub DEBUG { my ( $p, $f, $l ) = caller; print "$f:$l: ", pp(@_), "\n"; + } sub induced { my $trip = shift; my @matches; for my $QT ( @_ ) { DEBUG( $QT ); for my $triplet ( @$trip ) { DEBUG($triplet); my %seen; # my %Pie; DEBUG( \%seen ); # DEBUG( \%Pie ); undef @seen{@$QT}; DEBUG( \%seen ); delete @seen{@$triplet}; DEBUG( \%seen ); DEBUG( { KEYS_LEFT => \%seen, QT_SIZE => scalar(@$QT), TRIPLET_SIZE => scalar(@$triplet), }, ); if ( keys( %seen ) <= ( @$QT - @$triplet ) ) { DEBUG( $triplet ); push @matches, $triplet; } } ## end for my $triplet ( @$trip ) } ## end for my $QT ( @_ ) return @matches; } ## end sub induced sub Main { my @S = ( [ "b", "c", "a" ], [ "a", "c", "d" ], [ "d", "e", "b" ] ); my @T = ( [qw[ a b c d ]], [qw[ b e d ]] ); for my $one (@S) { my @matches = induced( \@T, $one ); print "\nGot some? ", pp( $one => { MATCHES => \@matches } ), "\n\ +n"; } } ## end sub Main __END__ qtPie:16: ["b", "c", "a"] qtPie:18: ["a" .. "d"] qtPie:20: {} qtPie:22: { a => undef, b => undef, c => undef } qtPie:24: {} qtPie:25: { KEYS_LEFT => {}, QT_SIZE => 3, TRIPLET_SIZE => 4 } qtPie:18: ["b", "e", "d"] qtPie:20: {} qtPie:22: { a => undef, b => undef, c => undef } qtPie:24: { a => undef, c => undef } qtPie:25: { KEYS_LEFT => { a => undef, c => undef }, QT_SIZE => 3, TRIPLET_SIZE => 3, } Got some? (["b", "c", "a"], { MATCHES => [] }) qtPie:16: ["a", "c", "d"] qtPie:18: ["a" .. "d"] qtPie:20: {} qtPie:22: { a => undef, c => undef, d => undef } qtPie:24: {} qtPie:25: { KEYS_LEFT => {}, QT_SIZE => 3, TRIPLET_SIZE => 4 } qtPie:18: ["b", "e", "d"] qtPie:20: {} qtPie:22: { a => undef, c => undef, d => undef } qtPie:24: { a => undef, c => undef } qtPie:25: { KEYS_LEFT => { a => undef, c => undef }, QT_SIZE => 3, TRIPLET_SIZE => 3, } Got some? (["a", "c", "d"], { MATCHES => [] }) qtPie:16: ["d", "e", "b"] qtPie:18: ["a" .. "d"] qtPie:20: {} qtPie:22: { b => undef, d => undef, e => undef } qtPie:24: { e => undef } qtPie:25: { KEYS_LEFT => { e => undef }, QT_SIZE => 3, TRIPLET_SIZE => + 4 } qtPie:18: ["b", "e", "d"] qtPie:20: {} qtPie:22: { b => undef, d => undef, e => undef } qtPie:24: {} qtPie:25: { KEYS_LEFT => {}, QT_SIZE => 3, TRIPLET_SIZE => 3 } qtPie:34: ["b", "e", "d"] Got some? (["d", "e", "b"], { MATCHES => [["b", "e", "d"]] })


Comment on Re^3: Finding subgraphs induced by a set of given vertices.
Download Code
Re^4: Finding subgraphs induced by a set of given vertices.
by Anonymous Monk on Oct 04, 2012 at 03:01 UTC

    Naturally I zoned out going from QT to T :) I should have not used @S, I should have called it @Triplets, and I also glossed over the output (one match was missing, doh). In main loop should be

    for my $one (@T) { my @matches = induced( \@S, $one );
Re^4: Finding subgraphs induced by a set of given vertices.
by AnomalousMonk (Monsignor) on Oct 04, 2012 at 16:07 UTC
    #~ sub DEBUG(){} # disable debugging

    Also note that  sub DEBUG(){} won't work to disable the  DEBUG() print function because of the empty argument list prototype (unless there's some magic associated with the  #~ thingie). Plain old  DEBUG {} would work, though.

      You're hilarious :) When you're done debugging the thing, done learning how it works, switch one debug sub for the other one, the disabling one, in my editor, its select both lines, and hit Ctrl+Q , it toggles comments ( #~ )

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://997164]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2014-09-01 20:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (17 votes), past polls