LeetCode Everyday--52
2015-08-03 19:23
218 查看
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
跟之前的解法略有不同,但是递归的思想基本相同。之前用一个二维数组储存棋盘,现在只需要存储所占据的列,主副对角线,每当摆放一个皇后的时候检查对应的列,主对角线是否被占据,若没有则摆放皇后并向下递归。
Now, instead outputting board configurations, return the total number of distinct solutions.
[code]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; } } } };
跟之前的解法略有不同,但是递归的思想基本相同。之前用一个二维数组储存棋盘,现在只需要存储所占据的列,主副对角线,每当摆放一个皇后的时候检查对应的列,主对角线是否被占据,若没有则摆放皇后并向下递归。
相关文章推荐
- MATCOM & C++ &数学表达式计算
- POJ 2528 Mayor's posters 并查集+离散化做法
- win8系统安装Oracle 11g报错:[INS-13001]环境不满足最低要求--解决办法
- 多态小结
- HDU 2689 Sort it (树状数组)
- POJ 2528 Mayor's posters 并查集+离散化做法
- linux编程出错: Value too large for defined data type.doc
- 凸n+2边形进行三角形分割(只连接顶点对形成n个三角形)数:
- 拓扑排序 SRM 660 Div2 Medium: PrivateD2party
- LA 4256 DP Salesmen
- Linux启动新进程的几种方法及比较
- 线段树成段更新及懒散标记
- can’t help doing还是can’t help to do
- 母港TOP用新API_url = "api_port/port";20150803
- 母港TOP用新API_url = "api_port/port";20150803
- Android ViewFlipper用法浅析
- 瞎扯大数据
- C++ 计蒜客算法基础入门最长上升子序列
- 指针函数与函数指针的区别
- c/c++----------虚函数、虚继承、纯虚函数