Red de conocimiento informático - Aprendizaje de código fuente - Código de lenguaje C del algoritmo de Sudoku

Código de lenguaje C del algoritmo de Sudoku

1. Pasos:

1. Para cada espacio, infiera el número que se puede completar de acuerdo con las reglas y almacene todos sus valores posibles. > 2. Determine el orden de llenado en función del número de valores posibles. Por ejemplo, solo hay una posibilidad para algunos espacios en blanco y ese debe ser el resultado correcto, complételo primero.

3. Después de llenar todos los espacios que tienen una sola posibilidad, regrese al paso 1 y vuelva a determinar los valores posibles de los espacios restantes.

4. no hay una posibilidad Cuando hay espacios (es decir, cada espacio tiene más de dos posibilidades), en orden del número de valores posibles de pequeño a grande, utilice primero la búsqueda en profundidad (ancho) para completar los espacios restantes.

2. Rutinas: #include?lt; windows.hgt;

#include?lt; hgt;

char?sd[81];

bool?isok?=?false;

//Mostrar Sudoku

void ?show()

{ if?(isok)?puts("Solución completada"); else?puts("Inicialización completada"); lt;?81;?i) { putchar(sd[i]? ?'0'); si?((i? ?1)??9?==?0)?putchar('\n') ; putchar('\n');

}

//Leer Sudoku

bool?Init()

{ ARCHIVO?* fp?=?fopen("in.txt",?"rb"); si?(fp?==?NULL)?return?false(sd,?81,?1,?fp) ; ); para?(int?i?=?0;?i?lt;?81;?i ) { si?(sd[i]?gt;=?'1'?amp;amp;? sd[i] ?lt;=?'9')?sd[i]?-=?'0'; else?sd[i]?=?0 } show(); retorno?true;

}

//Resolver Sudoku de forma recursiva

void?force(int?k)

{ if?(isok)?return; ]) { para?(int?m?=?1;?m?lt;=?9;?m ) {

bool?mm?=?true;

para ?(int?n?=?0;?n?lt;?9;?n )

{

si?((m?==? sd[k/27 *27 (k9/3)*3 n n/3*6])?||?(m?==?sd[9*n k9])?||?(m?==?sd [k/9* 9 n]))

{ mm?=?false; romper;

}

}

si ?(mm)

{

sd[k]?=?m;

si?(k?==?80)

{ isok? =?verdadero; mostrar(); retorno;

}

fuerza(k? ?1);

} } sd[k ]?=?0 ; } else { if?(k?==?80) {

isok?=?true;

mostrar();

return } (k? ?1); }

}

int?main()

{ sistema("CLS"); { double?start?=?clock(); force(0); printf("Consume tiempo.0fms",?clock()?-?start); } else?puts("Error de inicialización");

}