function [chess,row,main,deputy,number]=justtry(i,n,chess,row,main,deputy,number);
复制代码
这一行定义了justtry函数,它接受当前行i、棋盘大小n、棋盘chess、有关行和对角线占用的信息(row、main、deputy)以及当前解的计数number。它将在处理后返回这些变量的更新版本。- w! K! v0 D/ ]7 E" j! O' K6 M0 B
for k=1:8- _% Q8 @" x$ ]8 J$ q+ B2 a. T
6 R9 P( k& [( K4 j& l" g& Z# a) r
这开始一个循环,迭代处理当前行的每一列(k)。# U( [) G6 _" A; ^, H
if row(k)==0 & main(i-k+n)==0 & deputy(i+k-1)==0; h+ ?0 q+ z0 `( i. f' }
. k# W, t- D( d5 @
这个条件检查当前列、主对角线和副对角线是否没有被占用。如果为真,则考虑在此位置放置皇后。
chess(i,k)=1; ~- f. t) R: ~: x# k( Z# o
row(k)=1; 4 x5 E0 e6 `4 u4 U7 X7 t% V
main(i-k+n)=1; # q/ j* V6 y5 B+ j7 P0 [
deputy(i+k-1)=1;; |\" t, ~3 p1 a; H
复制代码
如果条件满足,就在当前位置放置一个皇后,并更新相应的数组(row、main、deputy)来标记占用。 ; F, [* l8 B7 W3 v if i==8$ |5 t/ W. N/ B& H' G. R0 d+ j
& m# k. B U9 X: d
这检查是否已经到达了最后一行。如果为真,说明找到了一个解。
number=number+1; W) h0 ]1 ^0 A! M: T4 T
chess
复制代码
解的计数增加,并打印当前的棋盘配置。+ r. n. ?, O' b% f, J [# _
else7 v' U, K; |4 f6 s H( D
- l% {0 e" E: A' k9 l( f
如果不在最后一行,函数继续搜索,通过递归调用自身处理下一行。