di Massimo Fantin
HOME
Questo gioco mi è stato proposto da due miei studenti che ne
cercavano a mano la risoluzione. L'analisi del metodo è interessante dal punto di vista matematico
Il modello di rappresentazione del problema è un albero del quale si devono analizzare i
rami fino a quando non si trova quello che costituisce una soluzione ,
proseguendo nell'ìanalisi dei rami dell'albero si possono trovare tutte le
soluzioni.
Il gioco consiste nel riempire un quadrato di n x n casella con i numeri da 1 a n2 in modo che il successivo di un numero sia spostato o di tre caselle in alto, in baso, a destra, a sinistra oppure in diagonale in una delle quattro direzioni saltando una casella.
E' facile dimostrare che se n<5 il gioco non ha soluzione. Se n è almeno 5 per trovare le soluzioni si può procedere in modo come segue:
Se un numero x si trova in una determinata casella, il numero successivo occuperà una delle 8 caselle di cui sopra ( ammesso che siano disponibili). Nominiamo queste otto caselle secondo un ordine ben definito per esempio cominciamo dalla casella in basso e la indichiamo convenzionalmente con "a". Ruotiamo in senso antiorario in modo che la posizione in diagonale basso destra sia la "b", quella a destra è la "c" e così via fino alla "h" che è in basso a sinistra. E' importante che una volta scelta una condizione la si rispetti sempre.
Si assegna il numero 1 a una casella per esempio la prima in alto.
si assegna il numero 2 alla prima casella libera secondo la
convenzione presa sopra, per esempio la casella 2 sarà tre caselle sotto
l'uno perché libera. Si procede così per il numero 3, 4 fino a quando si
arriva ad un numero per il quale tutte le caselle permesse per il numero
successivo sono occupate e non si può procedere oltre. A questo punto
si cancella l'ultimo numero scritto si torna al numero precedente si
prende come successivo di quest'ultimo la casella disponibile che, secondo
l'ordine scelto viene immediatamente dopo quella già considerata. Se nessun di queste caselle è disponibile
si ritorna ancora indietro fino a quando non si trova una casella che abbia
disponibile un'altra uscita. Si ricomincia analizzando la nuova via. Si
procede in questo modo fino a che non si sono
riempite tutte le caselle si è raggiunta una delle soluzioni cercate. Per
cercare la soluzione successiva si torna indietro di una casella, si cancella la
via già percorsa e si procedere nuovamente. In questo modo è possibile trovare
tutte le soluzioni.
Il metodo indicato è un metodo costruttivo nel senso che permette di
costruire tutte le soluzioni, il problema in questo metodo è che i tempi di
calcolo crescono rispetto alle dimensioni del gioco in modo esponenziale e
i tempi di calcolo diventano presto enormi. Se per risolvere il
problema con una tabella 7x7 è di pochi secondi , per risolvere una di 9x9 sono
richieste ore mentre quella 10x 10 tempi lunghissimi.
Se non interessano tutte le soluzioni ma se ne vuole trovare solo alcune si può
procedere come segue, suddividendo il problema in sottoproblemi di dimensioni
inferiori. Per esempio per trovare una soluzione 10x10 o anche più grandi si può usare il metodo
"Divide et imperat" Modo generico di indicare un metodo informatico che si applica ad una
grande serie di problemi per i quali, come in questo , l'aumento di
dimensioni fa aumentare enormemente il tempo di calcolo: si divide il problema
in più sottoproblemi di dimensioni inferiori e ricomponendo le soluzioni di
questi sottoproblemi è possibile giungere alla soluzione del problema
principale.
Nel nostro caso per risolvere un quadrato 10x 10 si può pensare di
suddividere il quadrato in quattro quadrati 5 x 5. risolvere il primo in modo
che l'ultimo numero: il 25 sia vicino al bordo.Iil 26 sarà in una
casella del quadrato vicino. Si ripete il procedimento fino a che non si è
riempito tutto il quadrato.
1 | 16 | 13 | 4 | 17 | 82 | 96 | 94 | 81 | 93 |
24 | 21 | 10 | 7 | 22 | 90 | 79 | 84 | 89 | 78 |
14 | 5 | 18 | 15 | 12 | 98 | 87 | 92 | 97 | 86 |
2 | 8 | 23 | 3 | 9 | 83 | 95 | 100 | 80 | 94 |
25 | 20 | 11 | 6 | 19 | 91 | 76 | 85 | 88 | 77 |
28 | 46 | 29 | 39 | 34 | 66 | 58 | 73 | 65 | 57 |
43 | 49 | 36 | 44 | 31 | 51 | 7 | 62 | 54 | 71 |
26 | 40 | 33 | 47 | 28 | 60 | 75 | 67 | 59 | 74 |
37 | 45 | 30 | 50 | 35 | 63 | 55 | 72 | 64 | 56 |
42 | 48 | 27 | 41 | 32 | 52 | 69 | 61 | 53 | 68 |
Questa è una tavola 10 x 10 risolta in questo modo, si vede infatti che i numeri da 1 a 25 sono tutti nel quadrato 5x5 in alto a sinistra, i numeri da 26 a 50 nel quadrato in basso a sinistra, i numeri da 51 a 75 sono in basso a sinistra e infine i numeri da 76 a 100 sono in alto a destra. naturalmente questo metodo non permette di trovare tutte le soluzioni.
Lo studio dei problemi naturalmente ne apre altri, per esempio pensando a una figura che non sia necessariamente un quadrato, come devono essere forma e dimensioni e affinché ammetta soluzioni?
Il programma esegue le operazioni illustrate sopra molto più velocemente di quanto si possa fare a mano, per avere un'idea della velocità , con il mio computer, che è già vecchiotto, il numero di passi che il programma esegue in un secondo è circa 50 milioni.
I passi si possono eseguire uno per volta facendo click su
passo. o tutti insieme facendo click su via.
Per evitare che il computer non si fermi più è previsto un tempo massimo
espresso in passi che può essere modificato fino a un max di 10 miliardi ( il
tempo è circa di 5 ore).
Se il programma non è riuscito a trovare una soluzione nel numero dei passi
previsto si ferma e visualizza la configurazione a cui era arrivato.
Per continuare si può fare nuovamente click su
via.
I tasti x+ e x-, y+ y- cambiano le dimensioni del gioco mentre il tasto sposta cambia la cella di partenza.
L'applet che segue è un aggiornamento del programma originale ed è possibile risolvere il problema su rettangoli. Si può osservare che mentre nel caso del rettangolo 4x4 non ci sono soluzioni , il problema 4x5 ha 6 soluzioni che si possono trovare facilmente.