Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <conio2.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- // Resolvemos el sudoku sin aleatorios, partiendo desde el 1 hasta el 9 uno por uno..
- int sudoku[10][10];
- int check_col (int col,int num); // Funcion donde compruebo conflicto en columna
- int check_row (int row,int num); // Funcion donde compruebo conflicto en fila
- int check_cubo (int row,int col,int num); // Funcion donde compruebo conflicto en ubo
- int resolver (int row,int col); // Funcion que resuelve el sudoku en la posicion x,y (0,0)
- int siguiente (int row,int col); // Función que manda a resolver la siguiente posición...
- void mostrar (void); // Funcion que muestra nuesto sudoku (array 9x9) esté o no esté completo.
- void generar_raiz(void); // Función que genera 9 numeros aleatorios del 1-9 para la primera fila por lo que el sudoku es distinto cada vez
- void FIN (void); // Cuando se completa de solucionar se ejecuta esta función.
- main() {
- // generar_raiz();
- resolver(0,0);
- }
- // Chekea Columna
- int check_col (int col,int num) {
- for (int row=0;row < 8;row++) {
- if (sudoku[row][col] == num) { return false; }
- }
- return true;
- }
- // Checkea Fila
- int check_row (int row,int num) {
- for (int col=0;col < 8;col++) {
- if (sudoku[row][col]== num) { return false; }
- }
- return true;
- }
- // Checkea Cubo
- int check_cubo (int row,int col,int num) { ;
- row=(row/3)*3;
- col=(col/3)*3;
- for(int r=0; r < 3;r++) {
- for(int c=0; c < 3;c++) {
- if (sudoku[row+r][col+c]==num) { return false; }
- }
- }
- return true;
- }
- // Resolver el sudoku
- int resolver (int row,int col) {
- if(row>8) { FIN(); }
- // Si la casilla no esta en blanco pasamos a la siguiente.
- if(sudoku[row][col] != 0) { siguiente(row,col); }
- else { //Encontramos un numero valido para la casilla libre..
- for(int num=1;num<10;num++) { printf("for %i\n",num);
- if(check_row(row,num) && check_col(col,num) && check_cubo(row,col,num)) {
- sudoku[row][col] = num;
- siguiente(row,col);
- }
- }
- sudoku[row][col] = 0;
- }
- }
- // Siguiente casilla
- int siguiente (int row,int col) {
- if (col < 8) { // Si no hemos llegado a la ultima columna, sumamos una
- resolver(row,col+1); printf("Siguiente columna\n");
- }
- else { // Si llego la ultima columna la pongo a 0 y sumo una fila
- printf("Siguiente fila\n");
- resolver(row+1,0); }
- }
- // Mostrar Sudoku
- void mostrar(void) {
- for (int x=0;x<=8;x++) {
- for (int y=0;y<=8;y++) {
- printf("%i ", sudoku[x][y]);
- if(y==2) { printf("| "); }
- if(y==5) { printf("| "); }
- if(y==8) { printf("\n"); }
- }
- if(x==2) { printf("------+-------+------\n"); }
- if(x==5) { printf("------+-------+------\n"); }
- }
- }
- // Cuando llegamos al final ................
- void FIN(void) {
- printf("\n\tSolucion encontrada\n\n\tPulse una tecla para mostrar..");
- getch();
- clrscr();
- mostrar();
- getch();
- exit(0);
- }
- //Genero primera fila aleatoria que hará que todo lo demás sea aleatorio.
- void generar_raiz (void) {
- srand(time(NULL));
- int numgen=rand()%10;
- for (int n=0;n<=8;n++) {
- for (int x=0;x<=8;x++) {
- if (numgen==sudoku[0][x]) { numgen=rand()%10; x=-1; }
- }
- sudoku[0][n]=numgen;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement