知识点
DFS 回溯
知识点
经典八皇后问题,从上到下一行一行填入,枚举填在哪一列,同时开三个布尔数组分别代表某列、某对角线、某副对角线是否被使用。回溯后记得恢复现场。时间复杂度为
AC code (C++)
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ int totalNCow(int n) { vector<bool> cols(10), d1(20), d2(20); int res = 0; function<void(int)> dfs = [&](int u) { if (u == n) { res += 1; return; } for (int i = 0; i < n; i ++) { if (cols[i] or d1[u + i] or d2[u - i + n]) continue; cols[i] = d1[u + i] = d2[u - i + n] = true; dfs(u + 1); cols[i] = d1[u + i] = d2[u - i + n] = false; } }; dfs(0); return res; } };