function [chess,row,main,deputy,number]=justtry(i,n,chess,row,main,deputy,number);
复制代码
这一行定义了justtry函数,它接受当前行i、棋盘大小n、棋盘chess、有关行和对角线占用的信息(row、main、deputy)以及当前解的计数number。它将在处理后返回这些变量的更新版本。 ) J/ e/ @7 ]8 H* ^* qfor k=1:8 5 Y) U* {* [, L$ [' G& a - J; D. j! i/ J这开始一个循环,迭代处理当前行的每一列(k)。 0 D7 U0 i% B7 A2 s6 oif row(k)==0 & main(i-k+n)==0 & deputy(i+k-1)==0! X4 j+ i1 E @3 J
% Z* I! b( Z. M% e/ j这个条件检查当前列、主对角线和副对角线是否没有被占用。如果为真,则考虑在此位置放置皇后。
chess(i,k)=1;+ n' s: S6 w S. {
row(k)=1; / D6 k5 \: f9 K
main(i-k+n)=1;: S: { E! o8 j. r
deputy(i+k-1)=1; # n2 O, H8 t9 g8 @
复制代码
如果条件满足,就在当前位置放置一个皇后,并更新相应的数组(row、main、deputy)来标记占用。 0 c. Y/ X# I' k- s0 u# { if i==8 - N! y S$ B# D4 i. X+ w : |* S1 d. o: ~, D这检查是否已经到达了最后一行。如果为真,说明找到了一个解。
number=number+1;$ v; A2 G; a) v/ k0 s
chess
复制代码
解的计数增加,并打印当前的棋盘配置。: G0 c0 n7 \; x
else ; v" I* {- I7 ? [) K' a6 I) u$ y/ k 3 _5 q- k( m b* }) ~9 W. B1 S2 }如果不在最后一行,函数继续搜索,通过递归调用自身处理下一行。