Algoritmo de Sudoku código de lenguaje c
1. Para cada espacio, infiera el número que se puede completar de acuerdo con las reglas y almacene todos sus valores posibles
2. número de valores para determinar el orden de llenado. Por ejemplo, solo hay una posibilidad para algunos espacios y debe ser el resultado correcto. Rellénelos primero.
3. Después de llenar todos los espacios con una sola posibilidad, regrese al paso 1 y vuelva a determinar los valores posibles de los espacios restantes.
4. más de un espacio posible (es decir, cada Cuando un espacio tiene más de dos posibilidades), se utiliza una primera búsqueda de profundidad (ancho) para completar el espacio restante en orden del número de valores posibles de pequeño a grande.
2. Rutinas:
¿#Incluir? ltwindows.h gt
#¿Incluir? ltstdio.h gt
#¿Contiene? lttime.h gt
¿Carácter? SD[81];
¿Booleano? ¿Isok? =?Falso;
//Mostrar Sudoku
¿No es válido? mostrar()
{
¿Si? (isok)? Puts("Solución completada");
¿Y si? Puts("Inicialización completada");
¿Para qué? (int?i?=?0;?i?lt?81;?i)
{
putchar(sd[i]? ?'0');
¿Y si? ((¿Yo? ?1)??9?==?0)?putchar(' \n ');
}
putchar(' \n '); p>
}
p>
}
//Leer Sudoku
¿Booleano? Inicializar()
{
¿Archivo? *fp? =?fopen("in.txt ","Rb");
¿Si? (fp?==?NULL)? ¿devolver? Falso;
fread(sd, 81,?1,?FP);
fclose(FP);
¿Para qué? (int?i?=?0;?i?lt?81;?i)
{
¿Si? (sd[i]? gt=?'1'? amp amp?sd[i]? lt=?'9')?sd[i]? -=?'0';
¿Y si? IDE]? =?0;
}
mostrar();
¿Volver? Verdadero;
}
//Resolver Sudoku recursivamente
¿No es válido? fuerza(int?k)
{
¿Si? (isok)? Volver;
¿Si? (!SD[k])
{
¿Para qué? (int?m?=?1;?m?lt=?9;?m)
{
¿Booleano? ¿Eh? =?Verdadero;
¿Para qué? (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])
{
¿Eh? =?False;
Romper;
}
}
Si? (mm)
{
sd[k] =?m;
p>Si? (k?==?80)
{
Isok? =?Verdadero;
mostrar(); >
Retorno;
}
Fuerza (k? ?1);
}
}
p>
sd[k]? =?0;
}
Otro
{
Si =? =?80)
{
Isoke? =?Verdadero;
mostrar();
Regresar;
p >}
Fuerza(k? ?1);
}
}
int /p>
{
Sistema("CLS");
Si? (Init())
{
>¿Doble? ¿comenzar? =?reloj();
Fuerza(0);
Printf("Consume tiempo.0fms ", reloj()?-?Inicio);
}
¿Y si? Puts("Error de inicialización");
getchar();
}