#!/usr/bin/perl
###########################################
# keylock.pl - Sample for set covering
# Mike Schilli, 2003 (m@perlmeister.com)
###########################################
use warnings;
use strict;
use Algorithm::SetCovering;
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init({level => $INFO,
layout => "%m%n"});
my $alg = Algorithm::SetCovering->new(
columns => 4,
mode => "greedy");
$alg->add_row(1, 0, 1, 0);
$alg->add_row(1, 1, 0, 0);
$alg->add_row(1, 1, 1, 0);
$alg->add_row(0, 1, 0, 1);
$alg->add_row(0, 0, 1, 1);
my @to_be_opened = (@ARGV || (1, 1, 1, 1));
my @set = $alg->min_row_set(@to_be_opened);
print "To open (@to_be_opened), we need ",
scalar @set, " keys:\n";
for(@set) {
print "$_: ", join('-', $alg->row($_)), "\n";
}