I just wanted to use Graph module.
#!/usr/bin/perl
use strict; use warnings;
use Graph;
my @path_sets = ( [ "b", "c", "a" ], [ "a", "c", "d" ], [ "d", "e", "b
+" ] );
my @vertex_sets = ( [qw[ a b c d ]], [qw[ b e d ]] );
#convert [b,c,d] to "[b-c,c-d]"
sub to_pathstr {
my @path_set =@_;
my $pre='';my @ret=();
for (@path_set) {
for( @{$_} ){
push @ret, "$pre-$_" if ($pre);
$pre=$_;
}
}
return @ret;
}
#if edges of path[b,c,d] shares 2 edges of complete graph[a,b,c,d]
#this path go through 3 vertices of graph, maybe.
for my $vertex_set (@vertex_sets){
my($g, $c);
$g=new Graph(directed=>1);
$g->add_vertices( @$vertex_set );
$c=$g->complete; #ex. [a,b,c,d] =>a-b,a-c,a-d,b-a,b-c,b-d,c-a,c-b,
+c-d,d-a,d-b,d-c
print "target vertex=$g\n";
#convert array [b,c,d] to "b-c,c-d", Graph module's edge represent
+ation
for my $pathstr( map{ [ to_pathstr($_)] } @path_sets ){
my $regex=join('|', map{"\Q$_\E"} @{$pathstr});
my (@matched)= "$c" =~ /($regex)/g; #check how may egdes match
if( @matched >= 2 ){
print "matched path=".join(',',@$pathstr)."\n";
}
}
print "\n";
}
Your one with hash operation is nicer than mine.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Outside of code tags, you may need to use entities for some characters:
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.