/************************************************************************\ * Programa: sudoku1.cpp * * Descripción: Programa que resuelve un sudoku que se lee desde fichero * * Autor: Pedro Corcuera * * Revisión: 1.0 2/02/2008 * \************************************************************************/ #include #include using namespace std; int sudoku[9][9]; void leeSudoku(void); void resSudoku(int, int); bool buscaCeldaVacia(int *, int *); bool puedoColocar(int, int, int); void impSudoku(void); int main(void) { leeSudoku(); resSudoku(0,0); return 0; } void resSudoku(int x, int y) { int nro, hayVacia; hayVacia=buscaCeldaVacia(&x, &y); if ( !hayVacia ) impSudoku(); else { for(nro=1; nro<=9; nro++) if ( puedoColocar(x, y, nro) ) { sudoku[x][y]=nro; // lo coloco resSudoku(x,y+1); // tomo el sgte sudoku[x][y]=0; // lo quito } } } bool buscaCeldaVacia(int *x, int *y) { for( ; *x<9; (*x)++) { for( ; *y<9; (*y)++) if( sudoku[*x][*y]==0 ) return true; *y=0; } return false; } bool puedoColocar(int f, int c, int nro) { int i, j, iniFil, finFil, iniCol, finCol; // comprueba fila for(j=0; j<9; j++) if(sudoku[f][j]==nro) return false; // comprueba columna for(i=0; i<9; i++) if(sudoku[i][c]==nro) return false; // comprueba subcuadrado iniCol = (c/3) *3; finCol = iniCol+3; iniFil = (f/3) *3; finFil = iniFil+3; for(i=iniFil; i> sudoku[i][j]; // scanf("%d",&sudoku[i][j]); } }