#include <stdio.h>
#include <conio.h>
#define uint unsigned int
/*------------------------------------------------------------------------
Programmma per la soluzione del solitario del 35, di Luigi Lamberti
--------------------------------------------------------------------------*/
void Maschera ( void );
void VediCampo ( int *, int );
void Valuta ( int *, int *, int *, int k);
//=========================================================================
void main ( void )
{ int Campo [150],
Mosse[] = { -39, -28, -24, -3, 3, 24, 28, 39 },
i;
uint Soluzioni;
Maschera();
for (i=0; i<143; Campo[i++]= -1);
for (i=42; i<=48; i++)
Campo[i] = Campo[i+13] = Campo[i+26] = Campo[i+39] = Campo[i+52] = 0;
Campo[71] = 1;
Soluzioni = 0;
Valuta (Campo, Mosse, &Soluzioni, 71);
getch();
}
/*==========================================================================
Funzione per la valutazione delle soluzioni.
--------------------------------------------------------------------------*/
void Valuta
( int *Campo, // Campo di gioco
int *Mosse, // sequenza delle otto mosse possibili
uint *Soluzioni, // Numero totale delle soluzioni trovate
int k // Ultima casella occupata
)
{ int i, h;
for (i=0; i<8; i++)
{ h = k + Mosse[i];
if (Campo[h] == 0) // la casella Š vuota
{ Campo[h] = Campo[k] + 1;
if (Campo[h] < 35)
Valuta (Campo, Mosse, Soluzioni, h);
else
{ (*Soluzioni) ++; VediCampo (Campo, *Soluzioni);
}
Campo[h] = 0;
}
}
}
/*========================================================================
Visualizza il Campo di Gioco
------------------------------------------------------------------------*/
void VediCampo
( int *Campo, // Campo di gioco
uint Soluzioni // Numero totale delle soluzioni trovate
)
{ int i, j;
textbackground(0); textcolor(14);
for (i=0; i<5; i++)
for (j=0; j<7; j++)
{ gotoxy (25+j*5, 7+i*2); cprintf ("%2d", Campo [42+i*13+j]);
}
textcolor(15); gotoxy (10, 22); cprintf ("Soluzioni %5u", Soluzioni);
}
/*=========================================================================
Maschera di gioco
--------------------------------------------------------------------------*/
void Maschera
( void
)
{ int i;
clrscr();
textbackground(4); textcolor(0);
gotoxy( 2, 1); for(i=2;i<=79;cprintf(" "),i++);
gotoxy(25, 1); cprintf("S O L I T A R I O d e l 3 5");
gotoxy ( 2,25); for(i=2;i<=79;cprintf(" "),i++);
gotoxy(58,25); cprintf("di Luigi Lamberti");
textbackground(0); textcolor(3);
gotoxy(23, 6); cprintf("+----+----+----+----+----+----+----+");
gotoxy(23, 7); cprintf("| | |
| | | | |");
gotoxy(23, 8); cprintf("+----+----+----+----+----+----+----+");
gotoxy(23, 9); cprintf("| | | | | | |
|");
gotoxy(23,10); cprintf("+----+----+----+----+----+----+----+");
gotoxy(23,11); cprintf("| | | | | | |
|");
gotoxy(23,12); cprintf("+----+----+----+----+----+----+----+");
gotoxy(23,13); cprintf("| | | | | | |
|");
gotoxy(23,14); cprintf("+----+----+----+----+----+----+----+");
gotoxy(23,15); cprintf("| | | | | | |
|");
gotoxy(23,16); cprintf("+----+----+----+----+----+----+----+");
}
|