代码如下:
1 class Solution { 2 public: 3 // record[row] 该行对应的列 4 vector<vector<string> > ans; // 结果集 5 vector<vector<string>> solveNQueens(int n) { 6 string s = ""; 7 for(int i=0; i<n; i++){ 8 s += ‘.‘; 9 } 10 vector<int> record(n); // 记录每行对应的列 11 vector<string> temp(n, s); // 临时解,需要push到ans中 12 dfs(0, n, temp, record); 13 return ans; 14 } 15 16 void dfs(int row, int n, vector<string> &temp, vector<int> &record){ 17 if(row == n){ // 到达最后一行,需要做处理,dfs出口 18 ans.push_back(temp); // 已经得到最优方案,直接返回,需要push到ans数组中。 19 return; 20 } 21 for(int i=0; i<n; i++){ // 对于每一列 22 record[row] = i; 23 if(isOK(record, row)){ 24 // 下面三行回溯经典代码 25 temp[row][i] = ‘Q‘; 26 dfs(row+1, n, temp, record); 27 temp[row][i] = ‘.‘; // 进行回溯!!! 28 } 29 } 30 } 31 32 bool isOK(vector<int> &record, int row){ // 判断row行旗子是否满足要求,三个要求画个图思考一下 33 for(int i=0; i<row; i++){ // 遍历row前面的每一行,是否冲突 34 if(record[row] == record[i] || row - record[row]==i-record[i] || 35 row+record[row]==i+record[i]) return false; 36 } 37 return true; 38 } 39 };
原文地址:https://www.cnblogs.com/conghuang/p/11833944.html
时间: 2024-11-07 13:03:46