function [chess,row,main,deputy,number]=justtry(i,n,chess,row,main,deputy,number);
复制代码
这一行定义了justtry函数,它接受当前行i、棋盘大小n、棋盘chess、有关行和对角线占用的信息(row、main、deputy)以及当前解的计数number。它将在处理后返回这些变量的更新版本。6 e' D: n. [7 k% I, q
for k=1:8 ; ^! z5 g2 d( W7 c ; O9 B# i, Z2 V- m/ f V; k这开始一个循环,迭代处理当前行的每一列(k)。 % z2 [7 h7 v0 N( jif row(k)==0 & main(i-k+n)==0 & deputy(i+k-1)==0 ) v& Q; A2 P+ X$ ]# l. L4 W7 p) m6 h
这个条件检查当前列、主对角线和副对角线是否没有被占用。如果为真,则考虑在此位置放置皇后。
chess(i,k)=1;3 e. c4 V" w/ s, t1 ^' n% `
row(k)=1;1 E& h( b9 p" h4 ]. t
main(i-k+n)=1; ) A# u6 t* L' ^, L% a, V
deputy(i+k-1)=1;8 Q. n% S6 g/ c0 s7 X
复制代码
如果条件满足,就在当前位置放置一个皇后,并更新相应的数组(row、main、deputy)来标记占用。 ! \, W/ v. c/ G& J! P2 J5 { f if i==8 " h/ G/ y& J8 R% u! ?2 m& i7 A 0 s" J" R1 [$ Q! ?" C# }这检查是否已经到达了最后一行。如果为真,说明找到了一个解。
number=number+1; " b8 }, l2 G4 O0 q
chess
复制代码
解的计数增加,并打印当前的棋盘配置。; K4 I% e. v" M9 \
else 0 _% t) K: A8 c; O. ?; h: [8 f/ O ; T. U% j4 X2 u T4 D如果不在最后一行,函数继续搜索,通过递归调用自身处理下一行。