Título: juego de suduku en lenguaje c Publicado por: chivis cristian en 9 Diciembre 2011, 03:45 am 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
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
} 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
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
if(correcto) resolver_sudoku(x,y+1); else sudoku
} } int main() { int x,y,correcto; for(x=0;x<9;x++) for(y=0;y<9;y++) tablero
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); } |