1. 程式人生 > >Leetcode 51. N皇後

Leetcode 51. N皇後

二維 AR false push 坐標 In 返回 LV IV

class Solution {
public:
    //最後返回的結果
    vector<vector<string>> ans;
    
    // 記錄路徑的信息,path的索引表示的第幾列,因此對應的值就是第幾行,這樣才可以確定一個唯一的二維坐標
    vector<int> path;
    
    // 標誌記錄信息
    vector<bool> row;
    vector<bool>  diagonal ;
    vector<bool>  back_diagonal ;
    
    
// idx表示現在走的是那一列,n表示總共多少列 void dfs(int idx, int n) { //遞歸的終止條件 if(idx >= n) { vector<string> chess; //有n行 for(int i=0;i<n;++i) { string tmp = ""; //有n列 for(int j=0;j<n;++j) {
if(path[j] == i) { tmp += "Q"; } else { tmp += "."; } } chess.push_back(tmp); } ans.push_back(chess);
return; } //idx表示當前走的是第幾列 遞歸的主要部分 for(int i=0;i<n;++i) { if(!row[i] && !diagonal[idx+i] && !back_diagonal[idx-i + n-1]) { path[idx] = i; //第i行被占據了 row[i] = true; diagonal[idx+i] = true; back_diagonal[idx-i + n-1] = true; dfs(idx+1, n); row[i] = false; diagonal[idx+i] = false; back_diagonal[idx-i + n-1] = false; } } } vector<vector<string>> solveNQueens(int n) { ans.clear(); path.resize(n,-1); row.resize(n, false); diagonal.resize((2*n-1), false); back_diagonal.resize((2*n-1), false); dfs(0, n); return ans; } };

Leetcode 51. N皇後