标签:
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