Я делаю проект по решению судоку с погоней за ортогональным соответствием и застрял, пытаясь написать код для одного из ограничений.
A = zeros(324,729);
% Row j has one k
for j=1:9
for k=1:9
RowA = (j-1)*9+k;
ColA = 81*(j-1)+(k-1)+[1:9:81];
A(RowA,ColA) = ones(1,9);
end
end
% Box (m,n) has one k
for j=1:9
m = ceil(j/3);
n = 1+mod(j-1,3);
for k=1:9
RowA = 81 + (j-1)*9+k;
ColA = (m-1)*243+(n-1)*27+(k-1)+[1 10 19 82 91 100 163 172 181];
A(RowA,ColA) = ones(1,9);
end
end
% Col j has one k
for j=1:9
for k=1:9
RowA = 162 + 9*(j-1)+(k-1)+[1:9:81];
ColA = 81*(j-1)+k;
A(RowA,ColA) = ones(1,9);
end
end
% Cell (m,n) has one value
Я понимаю, что ограничение, для которого я пытаюсь написать код, должно позволять заполнять все 81 ячейку значением от 1 до 9. Проблема в том, что я не уверен, как начать писать этот конкретный код в Matlab.