8 皇后解决方案未输出

8 queens solution is not being outputed

我正在 MATLAB 中处理 8 皇后问题,我似乎无法返回该函数的解。当代码为 运行 时,MATLAB 表示 "Output argument "solution"(可能还有其他)在调用 "C:\Users..." 期间未分配。我对函数 returns 的处理方式感到有点困惑解决方案以及为什么即使在函数中声明了我的解决方案也没有分配。如果输出在嵌套的 for 循环和 if 语句中,函数是否无法访问它?一旦函数达到其递归步骤的基本情况,解决方案是如何传递给函数的先前实例的?这也是未分配输出解决方案的原因吗?

function [solution] = PutQueen(column, board)

for row = 1:length(board)
    if can_place(row,column,board) == true % can_place checks if queen is in safe position
        board(row,column) = 1; % place queen on board
        if column==length(board)
          solution = board
        else
          PutQueen(column + 1, board);
        end
        board(row,column) = 0;% remove queen;
    end

end

end

由于您的问题的每个解都是一个二维矩阵,并且您需要所有可能的解,因此您的最终解必须是一个二维矩阵数组或只是一个三维矩阵。其中第 3 维中的每个矩阵都是一个解决方案。您可以通过-

    function [solution] = PutQueen(column, board)
      solution=[];
      for row = 1:length(board)
         if can_place(row,column,board) == true % can_place checks if queen is in safe position
         board(row,column) = 1; % place queen on board
                if column==length(board)
                  solution = cat(3,solution,board);
                else
                  temp = PutQueen(column + 1, board);
                  if(~isempty(temp))
                  solution = cat(3,solution, temp); %assigning to solution
                  end
                end
                board(row,column) = 0;% remove queen;
         end        
      end    
    end

这将给出solution,这是一个3维数组。现在您可以通过在第 3 维中迭代来获得每个解决方案。 例如:- solution(:,:,1) 将是一个解决方案等等。