1

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

谢谢你们。

4

1 回答 1

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
于 2013-02-26T07:02:36.440 回答