¿Podemos resolver Sudoku usando MATLAB?

Si podemos

Aquí está el código para el mismo.

Resolviendo Sudoku Usando Backtracking Recursivo

función X = sudoku (X)
% SUDOKU Resuelve Sudoku usando el seguimiento recursivo.
% sudoku (X), espera una matriz X de 9 por 9.
% Complete todos los “singletons”.
% C es una matriz de vectores candidatos para cada celda.
% s es la primera celda, si la hay, con un candidato.
% e es la primera celda, si la hay, sin candidatos.
[C, s, e] = candidatos (X);
mientras ~ isempty (s) && isempty (e)
X (s) = C {s};
[C, s, e] = candidatos (X);
final
% De retorno por rompecabezas imposibles.
si ~ está vacío (e)
regreso
final
% De retroceso recursivo.
si alguno (X (:) == 0)
Y = X;
z = encontrar (X (:) == 0,1); % La primera celda sin llenar.
para r = [C {z}]% Iterar sobre los candidatos.
X = Y;
X (z) = r; % Insertar un valor tentativo.
X = sudoku (X); % De llamadas recursivas.
si todo (X (:)> 0)% encontró una solución.
regreso
final
final
final
% ——————————
función [C, s, e] = candidatos (X)
C = celda (9,9);
tri = @ (k) 3 * ceil (k / 3-1) + (1: 3);
para j = 1: 9
para i = 1: 9
si X (i, j) == 0
z = 1: 9;
z (nonzeros (X (i, :))) = 0;
z (nonzeros (X (:, j))) = 0;
z (nonzeros (X (tri (i), tri (j)))) = 0;
C {i, j} = nonzeros (z) ‘;
final
final
final
L = cellfun (@ longitud, C); % Número de candidatos.
s = encontrar (X == 0 & L == 1,1);
e = encontrar (X == 0 & L == 0,1);
% de candidatos finales
end% sudoku

Fuente: – Resolviendo Sudoku con MATLAB

Si. Lo hice.