-
大小: 4KB文件類型: .7z金幣: 1下載: 0 次發(fā)布日期: 2021-06-10
- 語言: Matlab
- 標(biāo)簽: 整數(shù)規(guī)劃??數(shù)獨(dú)??matlab??
資源簡介
用Matlab的整數(shù)規(guī)劃函數(shù)求解數(shù)獨(dú),程序只有20行。
代碼片段和文件信息
%?初速狀態(tài),0表示沒填的格子
S?=?[?740080016
??900035004
??000700000
??070009500
??610050087
??002600040
??000004000
??300560002
??560010039];
%?定義0、1數(shù)組?A(i?j?k)?=?1,如果方格(i?j)里的數(shù)為k;否則為0。
%?sudoku問題即求一定假設(shè)條件下的解。
p?=?3;
A?=?binvar(p^2p^2p^2‘full‘);
%?以下為限制條件
F?=?[sum(A1)?==?1];?%?限制每行每個(gè)數(shù)恰好一個(gè)
F?=?[F?sum(A2)?==?1];?%?限制每列每個(gè)數(shù)恰好一個(gè)
F?=?[F?sum(A3)?==?1];?%?限制每個(gè)單元格子里恰好一個(gè)數(shù)
for?m?=?1:p
????for?n?=?1:p
????????for?k?=?1:p^2
????????????s?=?sum(sum(A((m-1)*p+(1:p)(n-1)*p+(1:p)k)));??
????????????F?=?[F?s?==?1];??%?限制每個(gè)3×3的方框里每個(gè)數(shù)恰好出現(xiàn)一次
????????end
????end
end
for?i?=?1:p^2
????for?j?=?1:p^2
????????if?S(ij)
????????????F?=?[F?A(ijS(ij))?==?1];?%?初始給定的數(shù)要一直
????????end
????end
end
%?直接求解
sol?=?solvesdp(F);?
Z?=?0;
for?i?=?1:p^2
??????Z?=?Z??+?i*double(A(::i));?%?簡單相加即可
end
Z?%?輸出結(jié)果
評(píng)論
共有 條評(píng)論