function [chess,row,main,deputy,number]=justtry(i,n,chess,row,main,deputy,number);
复制代码
这一行定义了justtry函数,它接受当前行i、棋盘大小n、棋盘chess、有关行和对角线占用的信息(row、main、deputy)以及当前解的计数number。它将在处理后返回这些变量的更新版本。 H3 t. I# Y; k
for k=1:8 . `* T/ v* V# C; T - m8 O0 x* c" q: g1 y这开始一个循环,迭代处理当前行的每一列(k)。& F4 g L1 p/ b
if row(k)==0 & main(i-k+n)==0 & deputy(i+k-1)==0 3 Q; T# G ]# g8 k' f4 P3 b , y2 m) h* L9 a: _/ j; r这个条件检查当前列、主对角线和副对角线是否没有被占用。如果为真,则考虑在此位置放置皇后。
chess(i,k)=1; % _% m# z- y- z ~/ W0 A
row(k)=1; 8 S2 D) x3 r$ G5 u
main(i-k+n)=1; 8 U0 y& x7 U/ {; `5 f* U
deputy(i+k-1)=1; 3 J' t9 k9 f1 e v5 h A
复制代码
如果条件满足,就在当前位置放置一个皇后,并更新相应的数组(row、main、deputy)来标记占用。 ( F$ g3 Y# o0 D; a if i==8 G4 _" x3 |. _4 O/ v 4 {( W @7 m6 ]这检查是否已经到达了最后一行。如果为真,说明找到了一个解。
number=number+1; * s- w( _+ t6 G, i
chess
复制代码
解的计数增加,并打印当前的棋盘配置。) f+ t( T, f, d; d; i
else' r; ]# p2 w+ i
3 f" U, \0 o r7 ~8 L. ^
如果不在最后一行,函数继续搜索,通过递归调用自身处理下一行。