Dev - C++ - sudocu ayudenme porfavor

   
Vista:

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);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:sudocu ayudenme porfavor

Publicado por Sasha (1 intervención) el 30/09/2007 15:29:27
Lo primero es que no entiendo la idea del sudoku, ya que no lo puedo resolver, solo apretar teclas para que me aparezca un cuadro con numeros, pero seguramente eso va a ser difertente a medida que pase el tiempo.
A mi se me compila bien, no tengo idea porque a vos no te compila... decime el error y te digo lo que pasa :)
Lo tercero es que te falta ponerle pausa al programa. Al final de cada funcion (inicializar y sudoku) te conviene poner getch (); o preferiblemente system ("pause"); Aunque hay mas funciones para poder hacer eso... la podes hacer vos mismo. si es que como a mi no te gusta que aparezca Presione una tecla para continuar.... ;). Si no pones pausa te van a aparecer los 6 cuadros de entrada (a menos de que quieras eso) solo ponelo al final de la funcion void "inicializar". Espero que te haya sido de ayuda! Por favor respondeme la pregunta de el ERROR. Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:sudocu ayudenme porfavor

Publicado por Mery (1 intervención) el 13/01/2009 05:19:30
#include <stdio.h>
#include <conio.h>

int sudoku[9][9]={{0,5,8,2,0,9,0,0,4},
{0,0,6,5,7,3,0,0,0},
{0,9,0,4,0,0,0,0,0},
{0,0,4,0,0,0,5,6,2},
{0,0,0,0,0,0,0,0,0},
{5,1,2,0,0,0,9,0,0},
{0,0,0,0,0,8,0,9,0},
{0,0,0,1,6,4,3,0,0},
{8,0,0,3,0,2,7,5,0}};

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(" ");
if(x==2||x==5) {
printf("---+---+---");
printf(" ");
}
}
printf(" ");
}

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 ");
else
resolver_sudoku(0,0);

printf("Combinaciones : %d ", cont);
}


compila bien :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:sudocu ayudenme porfavor

Publicado por yibag (1 intervención) el 22/05/2010 04:32:40
solo le hace falta un getch(); antes de elultimo corchete cerrado y la libreria conio.h
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar