52. N-Queens II

来源:互联网 发布:云进销存软件哪个好 编辑:程序博客网 时间:2024/05/18 02:55

Description:

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.


Thought:


从第一行开始尝试性摆放皇后

如果到第 i 列时,与之前的皇后都不冲突,那么则从下一行进行尝试

如果冲突则尝试第 i+1 列,依次递推,直到第 n 行摆放完毕,方案数+1


注意,由于使用递归的方法,所以result需要设置成全局变量,使得它能正常+1

还有一点,使用一维数组,默认每一个元素的数值代表该下标行皇后摆放的位置,减少了开销


Code:

class Solution {private:vector<int> result;public:int totalNQueens(int n) {result.push_back(0);int* maps = new int[n];setQueens(n, 0, maps);return result[0];}void setQueens(int rows, int n, int maps[]) {if (rows == n) {result[0] += 1;return;}for (int i = 0; i < rows; i++) {maps[n] = i;if (check(maps,n)) {setQueens(rows, n + 1, maps);}}}bool check(int maps[],int rows) {for (int i = 0; i < rows; i++) {if (maps[i] == maps[rows] || abs(maps[i] - maps[rows]) == abs(i - rows)) return false;//对于当前摆放的之前每一行都进行比较,不要i与i+1比较,会漏掉一些情况}return true;}};

原创粉丝点击