Está en la página 1de 6

juego de suduku en lenguaje c

« en: 9 Diciembre 2011, 03:45 »

pliss ayudaa tengo este codigo fuente y compila todo bien pero lo que pasa es que da 6
conbinaciones posibles del sudoku.

y quiero solo que me de una sola donde sera que esta la falla..

#include <stdio.h>

#include <stdlib.h>

int sudoku[9][9]=

{{8,0,0,0,0,0,6,0,0},

{0,2,9,6,7,0,0,1,0},

{0,0,0,0,1,4,0,5,0},

{6,0,0,3,9,1,5,0,2},

{0,5,1,0,0,0,9,0,0},

{9,0,2,0,0,6,0,0,0},

{0,6,0,4,3,0,0,0,0},

{0,9,0,0,8,7,1,6,0},

{0,0,7,0,0,0,0,0,3}};

int tablero[9][9];

int cont=0;

void imprimir_sudoku()

int x,y;

for(x=0;x<9;x++)
{

for(y=0;y<9;y++)

printf("%d", sudoku

[y]);

if(y==2||y==5)

printf("|");

printf("\n");

if(x==2||x==5) {

printf("---+---+---");

printf("\n");

printf("\n");

void inicializar(int x, int y) {

int a,b;

a=x;b=y+1;

while(a<9) {

if(tablero[a]==0) sudoku[a]=0;

b++;

if (b>8) { b=0;a++; }

int comprobar(int x, int y) {


int a,b,c,correcto,retorno,contador,x2,y2;

correcto=1;

for(a=1;a<=9 && correcto;a++) {

contador=0;

for(b=0;b<9 && correcto;b++) {

if(sudoku

!=0)

if(sudoku

==a)

contador++;

if (contador>1) correcto=0;

retorno=correcto;

if(correcto) {

for(a=1;a<=9 && correcto;a++) {

contador=0;

for(b=0;b<9 && correcto;b++) {

if(sudoku[y]!=0)

if(sudoku[y]==a)

contador++;

if(contador>1) correcto=0;

retorno=correcto;

}
if(correcto) {

for(a=1;a<=9 && correcto;a++) {

x2=(x-(x % 3));

y2=(y-(y % 3));

contador=0;

for(b=x2;b<x2+3;b++) {

for(c=y2;c<y2+3;c++) {

if(sudoku[c]!=0)

if(sudoku[c]==a)

contador++;

if(contador>1) correcto=0;

retorno=correcto;

return retorno;

int resolver_sudoku(int x, int y) {

int a, correcto;

if (y>8) { y=0;x++; }

while(x<9 && tablero

[y]!=0) {

y++;

if (y>8) { y=0;x++; }
}

if(x==9) {

if(!comprobar(8, 8)) {

printf("Sin solucion");

exit(-1);

} else {

imprimir_sudoku();

cont++;

if(cont==100)

exit(-1);

} else {

for(a=1;a<=9;a++) {

inicializar(x,y);

sudoku

[y]=a;

correcto=comprobar(x,y);

if(correcto)

resolver_sudoku(x,y+1);

else

sudoku

[y]=0;

int main() {

int x,y,correcto;

for(x=0;x<9;x++)
for(y=0;y<9;y++)

tablero

[y]=sudoku

[y];

correcto=1;

for(x=0;x<9 && correcto;x++)

for(y=0;y<9 && correcto;y++) {

correcto=comprobar(x,y);

if(!correcto)

printf("Datos de entrada incorrectos\n");

else

resolver_sudoku(0,0);

printf("Combinaciones : %d\n", cont);

También podría gustarte