Graph-Undirected-Hamiltonicity

 view release on metacpan or  search on metacpan

script/knights_tour.pl  view on Meta::CPAN

#!/usr/bin/perl env

use Modern::Perl;

my $DEBUG = 1;

use lib qw(/vagrant/GitHub/Graph-Undirected-Hamiltonicity/lib);

use Graph::Undirected;
use Graph::Undirected::Hamiltonicity;

my $board_size = 8; # 8x8 board
my ( @vertices, @edges, @A, %H );

my $i = 0;

for my $x ( 1 .. $board_size ) {
    for my $y ( 1 .. $board_size ) {
        my $v = $x . $y;
        push @A, $v;
        $H{$v} =  $v; # $i;
        $i++;
    }
}

for my $x ( 1 .. $board_size ) {
    for my $y ( 1 .. $board_size ) {
        my $v = $x . $y;

        push @vertices, $H{$v};

        say "v=$v" if $DEBUG;

        if ( $x > 2 ) {
            if ( $y > 1 ) {
                push @edges, [ $H{$v}, $H{ ($x - 2) . ($y - 1) } ];
            }
            if ( ( $y + 1 ) <= $board_size ) {
                push @edges, [ $H{$v}, $H{  ($x - 2) . ($y + 1) } ];
            }
        }

        if ( $x + 2 <= $board_size ) {
            if ( $y > 1 ) {
                push @edges, [ $H{$v}, $H{ ($x + 2) . ($y - 1) } ];
            }
            if ( ( $y + 1 ) <= $board_size ) {
                push @edges, [ $H{$v}, $H{ ($x + 2) . ($y + 1) } ];
            }
        }


        if ( $y > 2 ) {
            if ( $x > 1 ) {
                push @edges, [ $H{$v}, $H{ ($x - 1) . ($y - 2) } ];
            }
            if ( ( $x + 1 ) <= $board_size ) {
                push @edges, [ $H{$v}, $H{ ($x + 1) . ($y - 2) } ];
            }
        }


        if ( $y + 2 <= $board_size ) {



( run in 0.535 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )