0

我正在开发一个函数,以递归方式生成给定数独难题的解决方案,该数独难题由 9x9 数组表示,NaN 表示利用回溯的空格。

function cellSolutions = solveSudoku(PuzzleA)
    cellSolutions = {};
    if ~reject(PuzzleA)
        if accept(PuzzleA)
            disp('solution found')
            cellSolutions{end+1} = PuzzleA;
        end
        [nP, Idx] = firstChild(PuzzleA);
        while (~isempty(nP))
            possibleSolution = solveSudoku(nP);
            if (~isempty(possibleSolution))
                cellSolutions{end+1} = possibleSolution{1};
            end
            nP = nextChild(nP,Idx);
        end
    end
end

返回的 cellSolutions 是一个元胞数组,其中包含 0、1 或更多解,具体取决于存在的解。我遇到的问题实际上是在初始调用返回的 cellSolution 中找到的解决方案。我希望的是:

cellSolutions

    {[9x9 double] [9x9 double]} or {} or {[9x9 double]}

我确实可以确认通过 disp 调用找到了一个或多个解决方案,但我不确定如何操作单元阵列。我很确定问题出在:

while (~isempty(nP))
    possibleSolution = solveSudoku(nP);
    if (~isempty(possibleSolution))
        cellSolutions{end+1} = possibleSolution{1};
    end
    nP = nextChild(nP,Idx);
end

其他一些信息:reject 判断当前谜题是否满足数独规则;接受额外检查以确保没有空格;firstChild 在给定的数独谜题中找到 NaN 的实例,并将其更改为 1 并返回它更改的线性索引和新的谜题;nextChild 需要一个数独谜题和索引,如果该索引处的值不是 9,那么它会增加该值并返回新的谜题。谢谢!

4

0 回答 0