我正在研究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
答案 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)
将是一个解决方案,等等。