N 皇后 力扣解題

2022-06-20 02:03:10 字數 1721 閱讀 7567

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的數進行判斷一次...