演算法題 2 八皇后問題

2021-10-14 17:00:37 字數 1234 閱讀 8164

問題描述:八皇后問題是由國際西洋棋棋手馬克斯·貝瑟爾於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...