function [chess,row,main,deputy,number]=justtry(i,n,chess,row,main,deputy,number);
复制代码
这一行定义了justtry函数,它接受当前行i、棋盘大小n、棋盘chess、有关行和对角线占用的信息(row、main、deputy)以及当前解的计数number。它将在处理后返回这些变量的更新版本。8 F7 B+ F: b5 i! J" Q6 c6 A- ~. r
for k=1:8' k: O, x' `0 _1 n9 m& ^
* \$ r- C' N. Q) O
这开始一个循环,迭代处理当前行的每一列(k)。 $ e0 e( P6 }, m$ Sif row(k)==0 & main(i-k+n)==0 & deputy(i+k-1)==0, a& ]% C7 j& y+ S, R J
8 a. z; r. N8 N5 W' K. M M
这个条件检查当前列、主对角线和副对角线是否没有被占用。如果为真,则考虑在此位置放置皇后。
chess(i,k)=1; , {3 g/ c6 z& |0 s0 U5 L: e
row(k)=1;% l7 q. o* l# W
main(i-k+n)=1; & j9 u\" `0 F0 n7 B! E
deputy(i+k-1)=1; 6 Y* D8 }- _6 c [( k
复制代码
如果条件满足,就在当前位置放置一个皇后,并更新相应的数组(row、main、deputy)来标记占用。3 ^+ r" W, D$ A# }5 G
if i==8% O, y* T: u. |9 z
% |' @- t) A- `这检查是否已经到达了最后一行。如果为真,说明找到了一个解。
number=number+1; 4 y- a4 S- @5 j: M5 x
chess
复制代码
解的计数增加,并打印当前的棋盘配置。) {1 J+ t/ y% \, F
else : _. B5 Q* l3 x/ k' W 2 S$ K+ m) n* Y0 P0 z如果不在最后一行,函数继续搜索,通过递归调用自身处理下一行。