没有输出8个皇后解决方案

时间:2015-01-28 04:00:17

标签: matlab

我正在研究MATLAB中的8皇后问题,我似乎无法返回该函数的解决方案。当代码运行时,MATLAB在调用“C:\ Users ...”时没有分配“输出参数”解决方案“(也许是其他人)。我对函数如何返回解决方案以及为什么我的解决方案感到困惑即使在函数中声明了,也没有赋值。如果输出在嵌套的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

1 个答案:

答案 0 :(得分:0)

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

实现这一目标
    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

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