对于这个小片段,我生成一个随机数,检查它是否是行和列的一部分,如果它不是其中一部分,则插入数字。我知道它可能会放置一个已经在其3x3盒子中的数字,但这是我可以解决的问题。这是我的片段,如果想要我将编辑的整个代码。我的整个代码大约是100行。
% Find empty slots, generate random number 1 - 9, insert into slot.
for i=1:9
for j=1:9
number = board(i,j);
answer = ceil(9*rand(1,1));
row = board(i,:);
col = board(:,j);
if number==0 && (ismember(answer,row)==0) && (ismember(answer,col)==0)
board(i,j) = answer;
end
end
end
我的问题是,当我用一个真正未解决的谜题运行时,是 1)它将一个11插入一个插槽,这怎么可能? 2)我仍然看到有多个相同数字的行和列。
谢谢你们。
答案 0 :(得分:1)
我不知道为什么你的代码会导致行或列重复,为什么你会看到11,所以这可能不是你问题的答案,但它可能对你有所帮助。我稍微修改了你的代码,不仅要尝试一个随机数,还要尝试所有数字1-9(按随机顺序):
for i=1:9
for j=1:9
tried = [];
while board(i,j)==0
newRand = 0;
while ~newRand
answer = ceil(9*rand);
if ~ismember(answer,tried)
newRand = 1;
end
end
row = board(i,:);
col = board(:,j);
if (ismember(answer,row)==0) && (ismember(answer,col)==0)
board(i,j) = answer;
else
tried = [tried answer];
if length(tried)==9
break;
end
end
end
end
end