Sudoku Solver,小片段问题(matlab)

时间:2013-02-26 06:27:21

标签: matlab sudoku

对于这个小片段,我生成一个随机数,检查它是否是行和列的一部分,如果它不是其中一部分,则插入数字。我知道它可能会放置一个已经在其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)我仍然看到有多个相同数字的行和列。

谢谢你们。

1 个答案:

答案 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