当前位置: 首页 > >

八皇后问题(递归版)

/**

?*?
@author
?phinecos
?*?
@since
?2008/10/31
?
*/

{?
????
static
?
final
?
int
?MAXSIZE?
=
?
8
;
//
棋盘大小

????
public
?
static
?
boolean
?CanPut(
int
?row,
int
?col)
????{
//
皇后能否放置在chess[row][col]的位置上
????????
//
第row行不能有多于1个皇后

????????
for
(i
=
0
;i
<
MAXSIZE;
++
i)
????????{
????????????
if
(chess[row][i]
==
1
)
????????????????
return
?
false
;
????????}
????????
//
第col列不能有多于1个皇后

????????{
????????????
if
(chess[i][col]
==
1
)
????????????????
return
?
false
;
????????}
????????
//
对角线不能有多于1个皇后
????????
//
反对角线

????????{?
????????????
if
(chess[i][j]
==
1
)
????????????????
return
?
false
;
????????}
????????
for
(i
=
row
+
1
,j
=
col
-
1
;i
<
MAXSIZE
&&
j
>=
0
;
++
i,
--
j)
????????{
????????????
if
(chess[i][j]
==
1
)
????????????????
return
?
false
;
????????}????
????????
//
对角线

????????{
????????????
if
(chess[i][j]
==
1
)
????????????????
return
?
false
;
????????}
????????
for
(i
=
row
+
1
,j
=
col
+
1
;i
<
MAXSIZE
&&
j
<
MAXSIZE;
++
i,
++
j)
????????{
????????????
if
(chess[i][j]
==
1
)
????????????????
return
?
false
;
????????}
????????
return
?
true
;
????}
????
public
?
static
?
void
?Solve(
int
?curChess,
int
?num)
????{
????????
if
(num
==
8
)
????????{
//
八个皇后了,

????????????
return
;
????????}
????????
else

????????{
????????????
if
(curChess
<
64
)
????????????{
????????????????
int
?i,j;
????????????????i
=
curChess
/
MAXSIZE;
//


????????????????{
//
chesss[i][j]空着,并且经测试可以放置

????????????????????chess[i][j]
=
0
;?
//
回溯

????????????????Solve(curChess
+
1
,num);?
//
chess[i][j]无法放置,跳过它

????????}
????}
????
public
?
static
?
void
?main(String?args[])
????{?
????????
int
?i,j;
????????
for
(i
=
0
;i
<
MAXSIZE;
++
i)
????????????
for
(j
=
0
;j
<
MAXSIZE;
++
j)
????????????{
????????????????chess[i][j]?
=
?
0
;
????????????}
????????Solve(
0
,
0
);
????????System.out.println(
"
八皇后问题共有
"
+
okTimes
+
"
个解法
"
);?
????}
}?








相关资源:八皇后问题C++递归实现



友情链接: year2525网 工作范文网 QS-ISP 138资料网 528200 工作范文网 baothai 表格模版