原題地址:https://oj.leetcode.com/problems/n-queens/
題意:經典的N皇后問題。
解題思路:這類型問題統稱為遞歸回溯問題,也可以叫做對決策樹的深度優先搜索(dfs)。N皇后問題有個技巧的關鍵在於棋盤的表示方法,這里使用一個數組就可以表達了。比如board=[1, 3, 0, 2],這是4皇后問題的一個解,意思是:在第0行,皇后放在第1列;在第1行,皇后放在第3列;在第2行,皇后放在第0列;在第3行,皇后放在第2列。這道題提供一個遞歸解法,下道題使用非遞歸。check函數用來檢查在第k行,皇后是否可以放置在第j列。
代碼:
class Solution: # @return a list of lists of string def solveNQueens(self, n): def check(k, j): # check if the kth queen can be put in column j! for i in range(k): if board[i]==j or abs(k-i)==abs(board[i]-j): return False return True def dfs(depth, valuelist): if depth==n: res.append(valuelist); return for i in range(n): if check(depth,i): board[depth]=i s='.'*n dfs(depth+1, valuelist+[s[:i]+'Q'+s[i+1:]]) board=[-1 for i in range(n)] res=[] dfs(0,[]) return res