function [chess,row,main,deputy,number]=justtry(i,n,chess,row,main,deputy,number);
复制代码
这一行定义了justtry函数,它接受当前行i、棋盘大小n、棋盘chess、有关行和对角线占用的信息(row、main、deputy)以及当前解的计数number。它将在处理后返回这些变量的更新版本。* W7 n4 g- r( v& H4 d. |
for k=1:80 n# j" ]; X$ V0 W6 Y
5 C4 E2 q! ~. x$ n- g" d
这开始一个循环,迭代处理当前行的每一列(k)。 p- _$ N- L9 Q; W6 o8 eif row(k)==0 & main(i-k+n)==0 & deputy(i+k-1)==0 7 b) @* a" z& _2 O' t3 r7 e2 t/ V% g( V {8 u9 d. a
这个条件检查当前列、主对角线和副对角线是否没有被占用。如果为真,则考虑在此位置放置皇后。
chess(i,k)=1; # n3 {, l; T! b0 i1 Y
row(k)=1;; R0 R' j, t3 O- E5 V\" f
main(i-k+n)=1;2 S. t( w( a$ P! U* D
deputy(i+k-1)=1; : S% P }6 P\" z! z0 |; [# Z; @+ O9 Z
复制代码
如果条件满足,就在当前位置放置一个皇后,并更新相应的数组(row、main、deputy)来标记占用。" \& L3 u& e* E" x$ d/ d
if i==8+ k' P" M) {- X# M% C, X
用更新的参数递归调用函数处理下一行。, f0 c9 }* ]: c% F8 c
end " `2 M' W# w2 L: [$ ?8 Y* c* l) N, S . A q% F) k7 n* Q& K5 N1 o这标志着对最后一行的条件检查结束。
chess(i,k)=0; ! J6 O& E3 f H/ b% L. v
row(k)=0; 8 E1 n0 `4 c3 B! x/ I
main(i-k+n)=0;\" ?\" x+ D9 s( f% G' C* W4 u
deputy(i+k-1)=0; 8 S) W/ G/ g8 x6 H
复制代码
这是回溯的部分。如果在递归调用中找不到合适的位置放置皇后,则移除放置的皇后,并更新相应的数组,以回溯并尝试其他可能性。' v: {+ k+ b* @# o
end 3 E: x( {* E1 s$ s! C; Cend a4 p. r7 g, Z" c5 y
( {2 {# B5 x0 F. m g! [ a这标志着循环的结束和justtry函数的结束。循环迭代所有列,尝试在当前行找到可以放置皇后的有效位置。7 Z/ ^$ j5 Y+ a, v
end ( A* q7 O, V: r7 f: W0 T $ @* c! j7 Y6 v0 C# ^2 r* _这标志着主脚本的结束。整个过程由使用初始参数调用justtry函数开始。找到解时,它们将被打印出来。' K. X6 @: P+ Y9 T$ G3 f