n 皇后問題研究的是如何將 n 個皇后放置在 n*n 的棋盤上,並且使皇后彼此之間不能相互攻擊。
給你乙個整數 n ,返回所有不同的 n 皇后問題 的解決方案。
每一種解法包含乙個不同的 n 皇后問題 的棋子放置方案,該方案中 'q' 和 '.' 分別代表了皇后和空位。
示例 1:
輸入:n = 4
輸出:[[".q..","...q","q...","..q."],["..q.","q...","...q",".q.."]]
解釋:如上圖所示,4 皇后問題存在兩個不同的解法。
示例 2:
輸入:n = 1
輸出:[["q"]]
n, *_ = map(int, input().split())
table = [['.']* n for _ in range(n)]
# 記錄皇后以存在的列數
cols=
def solvenqueens(n):
# 存答案的列表
res =
for col in range(n):
table[0][col] = 'q'
# 重第一行的位置開始嘗試新增皇后,後面就往下面進行搜尋
dfs(table, 1, 0, res)
# 搜完成後進行回溯
table[0][col] = '.'
cols.remove(col)
return res
import copy
def dfs(table, x, y, res) -> none:
if y == n:
return
if x == n:
return
if y not in cols:
if check(table,x, y):
table[x][y] = 'q'
dfs(table, x+1, 0, res)
table[x][y] = '.'
cols.remove(y)
dfs(table, x, y+1, res)
def check(table, row, col):
for i in range(len(table)):
for j in range(len(table[0])):
if i+j == row+col or i-j == row-col:
if table[i][j] == 'q':
return false
return true
def parse(a):
res =
for i in range(len(a)):
b =
for j in range(len(a[i])):
s = ''
for k in a[i][j]:
if k == '.':
s+='.'
if k == 'q':
s+= 'q'
return res
print(parse(solvenqueens(n)))
力扣No 51 N皇后
n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位 示例 輸入 4 輸出...
力扣解題思路 打家劫舍
思路 題目 你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在...
力扣解題思路 素數
首先,如何判斷乙個數是否為素數呢,首先我們知道最小的素數是2,那麼我們從2開始判斷該數是否能找到被除數即可,完整 如下 public boolean isprimenum int i return true 思路 統計所有小於非負整數 n 的質數的數量。那麼這一題我們需要對每個小於n的數進行判斷一次...