問題定義:西洋棋中,皇后可以直線進攻也可以斜線進攻,問在nxn的西洋棋棋盤上擺n個皇后,問擺使得n個皇后之間無法相互進攻有多少種擺法?
通過回溯法解決。
def isvalid(matrix,row,col):
n = len(matrix)
for i in range(row):
for j in range(n):
if matrix[i][j]=='q' and (j==col or abs(row-i)==abs(col-j)):
return false
return true
class solution:
def solvenqueens(self, n: int):
matrix = [['.' for _ in range(n)] for __ in range(n)]
matrixs =
def dfs(x):
if x==n:
tmp = matrix.copy()
for i in range(n):
tmp[i] = ''.join(tmp[i])
return
for col in range(n):
if isvalid(matrix,x,col):
matrix[x][col]='q'
dfs(x+1)
matrix[x][col]='.'
dfs(0)
return matrixs
關鍵在於判斷當前皇后的位置和已經安排的皇后的位置是否衝突,深度優先搜尋 dfs(x)中x代表皇后所在的行,由於我們是一行一行依次擺放皇后的,所以不存在行衝突。只需要判斷列衝突和斜線的衝突。
判斷條件 matrix[i][j]==1 and ( j==col and abs(row-i)==abs(col-j))
解釋一下斜線的判斷: 前面放置的皇后的位置 i,j 與 此刻皇后的位置 row ,col 行的間距和列的間距正好相等,說明他們在一條斜線上。
回溯 皇后 演算法筆記 回溯演算法 N皇后問題
n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。示例 輸入 4 輸出...
回溯演算法n皇后問題
這是一道考查應聘者綜合能力的問題,其中包含了演算法的設計 ui的設計 介面的設計等問題,當然在具體面試中沒有時間讓應聘者完成整個設計和編碼,但是面試官往往通過了解應聘者的設計思路和工作步驟來考查應聘者的能力。本節將具體分析這道程式設計題。所涉及到的知識點 回溯演算法 net桌面應用程式的ui設計 分...
求 N 皇后問題回溯演算法
file queen.c description 求 n 皇后問題回溯演算法 include define delaytime 20000 顯示棋局時間 define topx 10 棋盤左上角 x 座標 define topy 5 棋盤左上角 y 座標 int n 皇后數量 int a 8 b 1...