问题描述:
在8*8的国际象棋上,摆放八个皇后,使其不能相互攻击,即任意两个皇后不能在同一行,同一列,同一斜线上,问有多少种摆法?
chessboard = [[0 for _ in range(8)] for _ in range(8)] # 生成8x8的棋盘0填充
def check_safe(point_x, point_y):
# 检查列
for row in chessboard:
if row[point_y] == 1:
return
# 检查副对角线
# y = +x + b
b = point_y - point_x
star_x = -b if b < 0 else 0
end_x = 7 if b < 0 else 7 - b
for x in range(star_x, end_x + 1):
y = x + b
if chessboard[x][y] == 1:
return
# 检查主对角线
# y = -x + b
b = point_y + point_x
star_x = 0 if b < 8 else b - 7
end_x = 7 if b > 7 else b
for x in range(star_x, end_x + 1):
y = -x + b
if chessboard[x][y] == 1:
return
return True
def print_chessboard():
print()
for i in chessboard:
print(i)
count = 0
def put_empress(x=0):
for y in range(8): # 通过循环拿到棋盘y坐标
if not check_safe(x, y):
# 进行下一次循环
continue
# 将皇后放在棋盘上
if x == 7:
global count
count += 1
# print_chessboard()
return
chessboard[x][y] = 1
put_empress(x + 1)
chessboard[x][y] = 0
put_empress()
print(count)
结果共有:92种放置方法