唯你测吧欢迎来自五湖四海的朋友!!!
希望大家为唯你测吧更添一道色彩!!!
欢迎大家加入Q群:34973397
欢迎大家访问测试中国网站:www.testingcn.com
八皇后问题的高效解法-递归版
上一篇 /
下一篇 2007-03-28 17:36:10
/ 个人分类:软件开发相关
//8 Queen 递归算法
51Testing软件测试网%[)dh d7M&\/Z5U1R}//如果有一个Q 为 chess[i]=j;
51Testing软件测试网5tKn p(y\,Mr//则不安全的地方是 k行 j位置,j+k-i位置,j-k+i位置
$Dj.[]%z EO!_0
mY;TAOmq0
51Testing软件测试网2W{ i$zCN\:Yclass Queen8{
dJ0dA%}*X0
51Testing软件测试网3N dPL-]x#Ef
M fr]X+_\'X0static final int QueenMax = 8;
HKI d\0static int ōktimes = 0;51Testing软件测试网T)v6h1Y8u`W
static int chess[] = new int[QueenMax];//每一个Queen的放置位置
5P!E h'UsUr%}0
51Testing软件测试网![&w+I6_x
1d%r?i8R2D)\L'{/n0public static void main(String args[]){
;fP,[7OG0for (int i=0;i<QueenMax;i++)chess[i]=-1; 51Testing软件测试网^9yBKoY&k/Wu\v3L!F
placequeen(0);
(h6r/L+b:z s0System.out.println("\n\n\n八皇后共有"+oktimes+"个解法 made by yifi 2003");
gtOO
tX4z0}51Testing软件测试网1Lg u"q:w JD3f3L
51Testing软件测试网F)V&W/dY/h O51Testing软件测试网/Qv2t,Da
public static void placequeen(int num){ //num 为现在要放置的行数
"Koq"L;Lq0int i=0;
(d([B.Cm%q`0boolean qsave[] = new boolean[QueenMax];51Testing软件测试网 ~]cylex$\!@;U
for(;i<QueenMax;i++) qsave[i]=true;
bBb(J C.`u051Testing软件测试网D |e?k!M;o$s7O2O
//下面先把安全位数组完成51Testing软件测试网;TS9S5m3IO5KU(rKf5v
i=0;//i 是现在要检查的数组值51Testing软件测试网-T6N4`|L\$\ d"fg-[0g
while (i<num){
IC(RdK.U4a:V0qsave[chess[i]]=false;51Testing软件测试网.t7s
m.sO6z(B
int k=num-i;
*Nd3`;v3Eu0if ( (chess[i]+k >= 0) && (chess[i]+k < QueenMax) ) qsave[chess[i]+k]=false;51Testing软件测试网.\w |1m?"_u3D
if ( (chess[i]-k >= 0) && (chess[i]-k < QueenMax) ) qsave[chess[i]-k]=false;
?~
}$GZ m0i++;51Testing软件测试网?}ZhE
}
HlX)A~E
G@1k3q0//下面历遍安全位
rx/C
q^IE0for(i=0;i<QueenMax;i++){
)_+j-n;BM5_Px0if (qsave[i]==false)continue;51Testing软件测试网Lx lQ)k
if (num<QueenMax-1){51Testing软件测试网)B
W1SS5P8z^
chess[num]=i;
)M)M ugM0placequeen(num+1);51Testing软件测试网&{:ny;wOy5G-@$c
}
]S)C3Y3q)`8L2~0else{ //num is last one