問題描述:八皇后問題是由國際西洋棋棋手馬克斯·貝瑟爾於2023年提出的問題,其表述為:在8×8的標準西洋棋棋盤上擺放8個皇后,使任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。
思想:不難想出,符合要求的擺法一定是每行有且僅有乙個皇后棋子。因此從第一行開始,嘗試在每一行的每個位置擺放皇后,每擺放一次便檢查已經擺放的所有棋子是否符合要求,符合時繼續擺放下乙個棋子,否則調整當前棋子。
**實現如下:
# encoding=utf-8
import copy
class solution:
def __init__(self, n):
self.chessboard =
self.set =
self.results = 0
self.num = n
self.eight_empresses_reduced()
def check(self, chessboard, m, n):
col = m
for i in range(n):
coli = chessboard[i].index(1)
if coli == col : return 0
elif n-i == abs(coli-col) : return 0
return 1
def action(self, n):
if n == self.num:
self.results += 1
else:
for i in range(self.num):
if self.check(self.chessboard, i, n) == 0:
self.chessboard[n][i] = 0
continue
else:
self.chessboard[n][i] = 1
self.action(n + 1)
self.chessboard[n][i] = 0
def eight_empresses(self):
row = [0]*self.num
for i in range(self.num) :
self.action(0)
f __name__ == '__main__':
emp = solution(11)
print(emp.results)
程式執行後輸出正確結果:92. 演算法 八皇后問題
問題簡述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在8 8的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n1 n1,而皇后個數也變成n2。而且僅當...
演算法 八皇后問題
問題描述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在8 8的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n n,而皇后個數也變成n。當且僅當n 1...
演算法 八皇后問題
created by xiaoyu on 2019 10 6.include include using namespace std const int n 8 int board n n int tot 0 int valid int x,int y for int i 0 i x i retur...