51. N 皇后018(回溯法求解)
一:題目
二:思路
思路:
1.這里在選擇建樹(也就是在選擇解的空間上)是 子集樹
2.那么在結(jié)點(diǎn)上我們選擇的是一個(gè)二維的矩陣就是將最后的結(jié)果落實(shí)到一個(gè)二維容器里
也就遍歷到葉節(jié)點(diǎn)時(shí)候一種可行解的情況
3.寫碼思路:
<1>:遞歸函數(shù)的參數(shù):
backtacking(int row,vector &v,int n)
row:代表矩陣的行數(shù)
vector &v:存放的是最后二維矩陣的可行解
n:代表的是棋盤的寬度和長(zhǎng)度
<2>:輸出結(jié)果
這里使用 vector<vector> v;
來處理每次的可行接
<3>:單層循環(huán)
這里橫向每層的循環(huán)是遍歷不同的列,橫向的是遞歸二維矩陣不同的行(往下進(jìn)行)
<4>:遞歸終止條件
當(dāng) row == n 時(shí)候,我們就可以將一次可行解裝入容器了
4.這里還需補(bǔ)充的是在遞歸函數(shù)里,我們?cè)诿看芜x擇皇后的位置的時(shí)候要注意題目的要求
不同行,不同列 不在同一條斜線上
不同行:因?yàn)槲覀兪侵饘油逻f歸的所以不同行我們就解決了
不同列:這里看代碼
不在一條斜線上:(分為45° 和 135°) 這里圖解
三:上碼
class Solution { public:vector<vector<string> > ans;//判斷位置是否合法 bool isLegal(int row,int cal,vector<string> &v,int n){//判斷是否在一列上for (int i = 0; i < row; i++) {//這里我們只判斷從row往上的行即可if (v[i][cal] == 'Q') return false;}//判斷是否在135°斜線上上for (int i = row - 1, j = cal - 1; i >= 0 && j >= 0; i--,j--) {if (v[i][j] == 'Q') return false;}//判斷是否在45°斜線上for (int i = row - 1,j = cal + 1; i >= 0 && j <= n; i--,j++){if (v[i][j] == 'Q') return false;}return true; }void backtacking(int row,vector<string> &v,int n) {if (row == n) {ans.push_back(v);return;}for (int cal = 0; cal < n; cal++) {//cal:列if (isLegal(row,cal,v,n)) {v[row][cal] = 'Q';//這是滿足條件的backtacking(row+1,v,n);v[row][cal] = '.';//當(dāng)一次可行結(jié)果 結(jié)束后,需要v將空間騰出來,給后面的可行解 }} }vector<vector<string>> solveNQueens(int n) {/**思路:1.這里在選擇建樹(也就是在選擇解的空間上)是 子集樹2.那么在結(jié)點(diǎn)上我們選擇的是一個(gè)二維的矩陣就是將最后的結(jié)果落實(shí)到一個(gè)二維容器里也就遍歷到葉節(jié)點(diǎn)時(shí)候一種可行解的情況3.寫碼思路:1>:遞歸函數(shù)的參數(shù):backtacking(int row,vector<string> &v,int n)row:代表矩陣的行數(shù)vector<string> &v:存放的是最后二維矩陣的可行解n:代表的是棋盤的寬度和長(zhǎng)度2>:輸出結(jié)果這里使用 vector<vector<string >> v;來處理每次的可行接3>:單層循環(huán)這里橫向每層的循環(huán)是遍歷不同的列,橫向的是遞歸二維矩陣不同的行(往下進(jìn)行)4>:遞歸終止條件當(dāng) row == n 時(shí)候,我們就可以將一次可行解裝入容器了4.這里還需補(bǔ)充的是在遞歸函數(shù)里,我們?cè)诿看芜x擇皇后的位置的時(shí)候要注意題目的要求不同行,不同列 不在同一條斜線上不同行:因?yàn)槲覀兪侵饘油逻f歸的所以不同行我們就解決了不同列:這里看代碼不在一條斜線上:(分為45° 和 135°) 這里圖解 **/vector<string>v (n,string(n,'.'));//這傳入的就是默認(rèn)的二維矩陣..backtacking(0,v,n);return ans;} };
加油 寶!!!!
總結(jié)
以上是生活随笔為你收集整理的51. N 皇后018(回溯法求解)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国产经典游戏《炎龙传说 1+2》在 St
- 下一篇: 7-4 N皇后 (28 分)(思路+详解