【題目描述】
數組
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.Given an integer n, return all distinct solutions to the n-queens puzzle.Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space respectively.app
n皇后問題是將n個皇后放置在n*n的棋盤上,皇后彼此之間不能相互***。給定一個整數n,返回全部不一樣的n皇后問題的解決方案。每一個解決方案包含一個明確的n皇后放置佈局,其中「Q」和「.」分別表示一個女王和一個空位置。ide
【題目連接】佈局
http://www.lintcode.com/en/problem/n-queens/
spa
【題目解析】code
經典的DFS遞歸回溯解法,大致思路就是對每一行,按每一列挨個去試,試到了就保存結果沒試到就回溯。
orm
難點大概就是用1個一維數組存皇后所在的座標值。對於一個棋盤來講,每一個點都有橫縱座標,用橫縱座標能夠表示一個點。遞歸
而這道題巧就巧在,每一行只能有一個皇后,也就是說,對於一行只能有一個縱座標值,因此用1維數組能提早幫助解決皇后不能在同一行的問題。ci
那麼用一維數組表示的話,方法是:一維數組的下標表示橫座標(哪一行),而數組的值表示縱座標(哪一列)。rem
這樣一來,皇后所在的座標值就能用一維數組表示了。而正是這個一維數組,在回溯找結果的時候不須要進行remove重置操做了,由於回溯的話正好就回到上一行了,就能夠再從新找下一個合法列座標了。
由於是按照每一行去搜索的,當行座標值等於行數時,說明棋盤上全部行都放好皇后了,這時就把有皇后的位置標爲Q,沒有的地方標爲0。
按照上面講的那個一維數組,咱們就能夠遍歷整個棋盤,當座標爲(row,columnVal[row])的時候,就說明這是皇后的位置,標Q就好了。
【參考答案】