先用最笨的穷举法求解,有空再研究更好的解法:
#
-*- coding: gb2312 -*-
size
=
8
#
棋盘大小
EMPTY
=
“
O
“
#
空位
QUEEN
=
“
X
“
#
皇后
#
查看棋盘的信息
def
show_board(cols):
for
i
in
range(
1
, size
+
1
):
for
j
in
range(
1
, size
+
1
):
if
j
==
cols[i]:
print
QUEEN,
else
:
print
EMPTY,
print
“
/n
“
,
#
检测棋盘上皇后摆法是否合法
#
return:
#
True(不冲突), False(有冲突)
def
check_board(cols):
for
i
in
range(
1
, size):
for
j
in
range(i
+
1
, size
+
1
):
if
(j
–
i)
==
abs(cols[j]
–
cols[i]):
return
False
return
True
solve_count
=
0
for
a
in
range(
1
, size
+
1
):
for
b
in
range(
1
, size
+
1
):
for
c
in
range(
1
, size
+
1
):
for
d
in
range(
1
, size
+
1
):
for
e
in
range(
1
, size
+
1
):
for
f
in
range(
1
, size
+
1
):
for
g
in
range(
1
, size
+
1
):
for
h
in
range(
1
, size
+
1
):
if
a
<>
b
and
a
<>
c
and
a
<>
d
and
a
<>
e
and
a
<>
f
and
a
<>
g
and
a
<>
h
and
b
<>
c
and
b
<>
d
and
b
<>
e
and
b
<>
f
and
b
<>
g
and
b
<>
h
and
c
<>
d
and
c
<>
e
and
c
<>
f
and
c
<>
g
and
c
<>
h
and
d
<>
e
and
d
<>
f
and
d
<>
g
and
d
<>
h
and
e
<>
f
and
e
<>
g
and
e
<>
h
and
f
<>
g
and
f
<>
h
and
g
<>
h:
cols
=
[0,a,b,c,d,e,f,g,h]
if
check_board(cols):
solve_count
+=
1
show_board(cols)
print
“
/n
“
,
print
“
found %i solves.
“
%
solve_count