File: matches.pl

package info (click to toggle)
libgraph-maker-perl 0.02-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 440 kB
  • sloc: perl: 1,198; makefile: 2
file content (50 lines) | stat: -rw-r--r-- 1,222 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use strict;
use warnings;

sub directedok
{
	my ($g) = @_;
	return 0 unless $g->directed();
	foreach my $e($g->edges())
	{
		return 0 unless $g->has_edge($e->[1], $e->[0]);
	}
	return 1;
}

sub matches
{
	my ($g, $edges, $directed, $debug) = @_;

	print "$g\n" if $debug;
	my @edges = grep {m/\-/} split(/,/, $edges);
	my $t = "$g";
	my $r = 1;
	$r &&= $g->has_edge(split(/-/, $_)) foreach (@edges);
	if($directed && $r)
	{
		$r &&= $g->has_edge(reverse split(/-/, $_)) foreach (@edges);
	}
	if($debug)
	{
		foreach (@edges)
		{
			print "[", join(', ', split(/-/, $_)), "]\n" unless $g->has_edge(split(/-/, $_));
		}
		if($directed)
		{
			foreach (@edges)
			{
				print '[', join(', ', reverse split(/-/, $_)), "]\n" unless $g->has_edge(reverse split(/-/, $_));
			}
		}
	}
	my %verts = map {do {my ($f, $t) = split(/-/, $_); ($f=>1, (defined $t ? ($t=>1) : ()))} } split(/,/, $edges);
	print "$r\te: " . $g->edges() . "\tE: " . @edges . "\tv: " . $g->vertices() . "\tV: " . keys(%verts) . "\t" . $g->is_directed() . "\n" if $debug;
	return $r
		&& $g->edges() == ($directed ? 2 : 1)*@edges
		&& $g->vertices() == keys %verts
		&& $g->is_directed() == $directed;
}

1;