sudocu ayudenme porfavor
Publicado por sudoku (1 intervención) el 29/09/2007 02:45:27
necesito saber que tengo mal en este codigo
porque no me compiila
#include <stdio.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[x][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][b]==0) sudoku[a][b]=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[x][b]!=0)
if(sudoku[x][b]==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[b][y]!=0)
if(sudoku[b][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[b][c]!=0)
if(sudoku[b][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[x][y]!=0) {
y++;
if (y>8) { y=0;x++; }
}
if(x==9) {
if(!comprobar(8, 8)) {
printf("Sin solucion");
return-1;
} else {
imprimir_sudoku();
cont++;
if(cont==100)
return -1;
}
} else {
for(a=1;a<=9;a++) {
inicializar(x,y);
sudoku[x][y]=a;
correcto=comprobar(x,y);
if(correcto)
resolver_sudoku(x,y+1);
else
sudoku[x][y]=0;
}
}
}
int main() {
int x,y,correcto;
for(x=0;x<9;x++)
for(y=0;y<9;y++)
tablero[x][y]=sudoku[x][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);
}
porque no me compiila
#include <stdio.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[x][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][b]==0) sudoku[a][b]=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[x][b]!=0)
if(sudoku[x][b]==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[b][y]!=0)
if(sudoku[b][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[b][c]!=0)
if(sudoku[b][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[x][y]!=0) {
y++;
if (y>8) { y=0;x++; }
}
if(x==9) {
if(!comprobar(8, 8)) {
printf("Sin solucion");
return-1;
} else {
imprimir_sudoku();
cont++;
if(cont==100)
return -1;
}
} else {
for(a=1;a<=9;a++) {
inicializar(x,y);
sudoku[x][y]=a;
correcto=comprobar(x,y);
if(correcto)
resolver_sudoku(x,y+1);
else
sudoku[x][y]=0;
}
}
}
int main() {
int x,y,correcto;
for(x=0;x<9;x++)
for(y=0;y<9;y++)
tablero[x][y]=sudoku[x][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);
}
Valora esta pregunta
0