function [chess,row,main,deputy,number]=justtry(i,n,chess,row,main,deputy,number);
复制代码
这一行定义了justtry函数,它接受当前行i、棋盘大小n、棋盘chess、有关行和对角线占用的信息(row、main、deputy)以及当前解的计数number。它将在处理后返回这些变量的更新版本。 M! v: \. Z! M% K* n! b
for k=1:80 v E: G6 G& K7 _
6 P* Y {: M8 Q" n) z
这开始一个循环,迭代处理当前行的每一列(k)。+ m9 V; q. A9 w% A( [
if row(k)==0 & main(i-k+n)==0 & deputy(i+k-1)==0 & j* ? F8 x B* B% O5 V r9 v! X5 R8 l
这个条件检查当前列、主对角线和副对角线是否没有被占用。如果为真,则考虑在此位置放置皇后。
chess(i,k)=1; 8 J- Z. [\" ?+ Q. V
row(k)=1; + W: C. c! r6 q$ H+ \
main(i-k+n)=1; ; T+ n1 K5 B\" T/ f% _% L+ c
deputy(i+k-1)=1; * [\" M4 G2 @/ m5 N* E- b
复制代码
如果条件满足,就在当前位置放置一个皇后,并更新相应的数组(row、main、deputy)来标记占用。 4 h; C2 [% J& r! y if i==8; F4 f7 y. ^6 a& W; P
0 Y+ m& J( @, ^9 \- l
这检查是否已经到达了最后一行。如果为真,说明找到了一个解。
number=number+1; 1 \6 V. |7 h/ X: y6 S0 P% ~
chess
复制代码
解的计数增加,并打印当前的棋盘配置。 ; E' C5 g0 ^# U8 ^+ y else$ f6 d7 @6 B! h; d7 X4 n
8 z( c4 S. b; o1 R3 W+ ?# ]- \8 c
如果不在最后一行,函数继续搜索,通过递归调用自身处理下一行。