LeetCode Everyday--52
来源:互联网 发布:知沟理论名词解释 编辑:程序博客网 时间:2024/04/30 11:52
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
class Solution {public: int totalNQueens(int n) { this->count = 0; this->column = vector<int>(n,0); this->main_diagonal = vector<int>(2 * n - 1,0); this->anti_diagonal = vector<int>(2 * n - 1,0); vector<int> queens = vector<int>(n,0); placeQueen(queens,0);//放置皇后 return count; }private: int count ;//解的个数 vector<int> column;//存放所占据的列 vector<int> main_diagonal;//存放所占据主对角线 vector<int> anti_diagonal;//存放所占据主对角线 //输出皇后位置 /* void printQueens(vector<int> queens){ int n = queens.size(); for(int i =0;i < n;i++){ for(int j =0;j < n;j++){ if(queens[i] == j){ cout<<"# "; }else{ cout<<"* "; } } cout<<endl; } cout<<endl; }*/ //放置皇后 void placeQueen(vector<int> &queens,int row){ int n = queens.size(); //找到一个解 if(row == n){ count++; //printQueens(queens);//输出解 return ; } for(int i = 0;i < n;i++){ //所在列及对角线未被占据 if(column[i] == 0 && main_diagonal[row + i] == 0 && anti_diagonal[i - row + n - 1] == 0){ //queens[row] = i;//记录第row行皇后所在位置 //将皇后所在列及对角线值1 column[i] = 1; main_diagonal[row + i] = 1; anti_diagonal[i - row + n - 1] = 1; placeQueen(queens,row + 1); //queens[row] = 0; column[i] = 0; main_diagonal[row + i] = 0; anti_diagonal[i - row + n - 1] = 0; } } }};
跟之前的解法略有不同,但是递归的思想基本相同。之前用一个二维数组储存棋盘,现在只需要存储所占据的列,主副对角线,每当摆放一个皇后的时候检查对应的列,主对角线是否被占据,若没有则摆放皇后并向下递归。
0 0
- LeetCode Everyday--52
- LeetCode Everyday --226
- LeetCode Everyday --171
- LeetCode Everyday -- 253
- LeetCode Everyday -- 70
- LeetCode Everyday -- 108
- LeetCode Everyday -- 83
- LeetCode Everyday -- 141
- LeetCode Everyday: 1. Two Sum
- Leetcode Everyday: 344. Reverse String
- Leetcode Everyday: 292. Nim Game
- Leetcode Everyday: 266. Palindrome Permutation
- Leetcode Everyday: 293. Flip Game
- Leetcode Everyday: 283. Move Zeroes
- Leetcode Everyday: 100. Same Tree
- Leetcode Everyday: 242. Valid Anagram
- Leetcode Everyday: 252. Meeting Rooms
- Leetcode Everyday: 217. Contains Duplicate
- 向服务器发送请求
- Pie
- HDU 2689 Sort it (树状数组)
- 多态小结
- The C Programming Language 第四章函数与程序结构 读书笔记
- LeetCode Everyday--52
- Linux多线程——使用互斥量同步线程
- MATCOM & C++ &数学表达式计算
- USACO 2.1.4 Healthy Holsteins
- jdbc在web中的应用
- 8月3日----UDP通信
- Android showmap
- 优秀的博客和网页
- 最全的常用正则表达式大全分享(转)