标签:
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.

思路:时间复杂度要求高了,还是每行每行的放,再开一个三维的标记数组,y-x代表了主对角线,y+x代表了负对角线。
class Solution {
public:
int ans;
int vis[3][1000];
void dfs(int cur, int tar) {
if (cur == tar) {
ans++;
return;
}
for (int i = 0; i < tar; i++) {
if (!vis[0][i] && !vis[1][cur+i] && !vis[2][cur-i+tar]) {
vis[0][i] = vis[1][cur+i] = vis[2][cur-i+tar] = 1;
dfs(cur+1, tar);
vis[0][i] = vis[1][cur+i] = vis[2][cur-i+tar] = 0;
}
}
}
int totalNQueens(int n) {
ans = 0;
memset(vis, 0, sizeof(vis));
dfs(0, n);
return ans;
}
};
标签:
原文地址:http://blog.csdn.net/u011345136/article/details/44197079