juego de suduku en lenguaje c

Iniciado por chivis cristian, 9 Diciembre 2011, 03:45 AM

0 Miembros y 1 Visitante están viendo este tema.

chivis cristian

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);
          }