Bavimo
Messages postés5Date d'inscriptionmercredi 29 mars 2006StatutMembreDernière intervention14 avril 2006
-
9 avril 2006 à 18:34
loveslife
Messages postés3Date d'inscriptionjeudi 2 décembre 2010StatutMembreDernière intervention21 mai 2012
-
23 févr. 2011 à 23:22
Si cela peut aider, vous trouverez un source pour résoudre les grilles de sudoku à :
http://www.i2i.fr/ Langage C. Méthode récursive. Mis à part la saisie, 25 lignes d'instructions suffisent.
A+
}
printf("\n\n");
}
}
//*************************************************
int ligne (int m[9][9],int y , int a)
{
int i;
for(i=0;i<9;i++)
if((abs(m[y][i])) == a )
return 0 ; //Existe deja
return 1 ;
}
//************************************************
int colone (int m[9][9],int x , int a)
{
int i ;
for(i=0;i<9;i++)
if(abs(m[i][x]) == a )
return 0 ; //Existe deja
return 1 ;
}
//************************************************
int sousgrille( int m[9][9], int y , int x , int a )
{
// y=ligne x=colone
int l1 , l2 ; // indice debut & fin de la sous grille (ligne)
int c1 , c2 ; // indice debut & fin de la sous grille (colone)
if(a>9) // on a rien pu mettre dans la case ou il ya 0
{
backtrackin(m,&y,&x);
}
}
affichage(m);
}
//************************************************
void remplissage(int m[9][9])
{
struct les_x{
int lg ; // lg : Limite gauche
int ld ; // ld : limite droite
}a[9];
struct les_y{
int lg ;
int ld ;
}b[9];
int i ;
//-----<<< definition des borne >>>
//----------------------- les x
a[0].lg=48,a[0].ld=55 ;
for(i=1;i<9;i++)
{ if(i%3==0&&i!=0)
{ a[i].lg=a[i-1].ld+81 ;
a[i].ld=a[i].lg+7 ;
}
else
{ a[i].lg=a[i-1].ld+49;
a[i].ld=a[i].lg+7;
}
}
//---------------------- les y
b[0].lg=32,b[0].ld=39 ;
for(i=1;i<9;i++)
{ if(i%3==0&&i!=0)
{ b[i].lg=b[i-1].ld+17 ;
b[i].ld=b[i].lg+7 ;
}
else
{ b[i].lg=b[i-1].ld+9;
b[i].ld=b[i].lg+7;
}
}
int x, y, clic;
clrscr();
_AX=0; geninterrupt(0x33); // initialise le driver de la souris
_AX=1; geninterrupt(0x33); // affiche le curseur de la souris
_setcursortype(_NOCURSOR); // on retire le "curseur du clavier"
affichage(m);
do
{
_AX=3; geninterrupt(0x33); // recherche des infos de la souris
clic=_BX; // le clic se trouve dans _BX
x=_CX; // l'abscisse dans le registre _CX
y=_DX; // la coordonn'e dans _DX
// clic gauche
if (clic & 1)
{
int i,j;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
if( x >= a[j].lg && x <= a[j].ld && y >= b[i].lg && y <= b[i].ld)
{ int temp ;
do
{
affichage(m);
gotoxy(10,25) ;
printf("===> Valeur pour la case- M[%d][%d] : ",i,j);
scanf("%d",&temp);
if(temp)
if(colone(m,j,temp)&&ligne(m,i,temp)&&sousgrille(m,i,j,temp))
;
else
{
affichage(m);
printf("Impossible de mettre %d !!",temp);temp=-1 ;
getch(); }
}while(temp<0 || temp>9);
m[i][j]=temp ;
affichage(m);clrscr();affichage(m);
}
}
}
while (!kbhit());
}
//*************************************************
main()
{
int m[9][9],i,j;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
m[i][j]=0; // Mise a Zero de la matrice
remplissage(m);
affichage(m);
sudo(m);
gotoxy(20,25);
textcolor(89);
cprintf("\a=**= FIN !! ESC pour Terminer =**=");
char c ;
do {
fflush(stdin);
c=getch();
}while(c!=27);
}</math.h></dos.h></stdlib.h></conio.h></stdio.h>
Vous n’avez pas trouvé la réponse que vous recherchez ?