Leetcode每日一題:52.N-Queens II(N皇后Ⅱ)
思路:一共有n行n列,放置n個皇后,同行同列同斜對角線都最多隻能有一個皇后;相當於從0~n-1行,每一行放一個,把第k行的皇后放在第j列時,檢查前面0~k-1行的皇后是否與第k行皇后的位置衝突,若衝突則嘗試把它放下一列
//判斷第k行的皇后所放置的位置是否與前面k-1個皇后衝突
bool judge(int *place, int k, int j)
{
for (int i = 0; i < k; i++)
{
//判斷第i個皇后是否與第k個皇后同列,或者同對角線abs(x2-x1)==abs(y2-y1)
if (place[i] == j || (k - i) == abs(j - place[i])) //如果衝突
{
return true;
}
}
return false;
}
//放置第k行的皇后到place[k]列上
void check(int *place, int k, int n, int &res)
{
if (k == n) //已放置n個皇后,無需再放置,方案個數++
{
res++;
return;
}
for (int j = 0; j < n; j++) //第k行的皇后所放置的位置從0~n-1挨個試
{
if (!judge(place, k, j)) //如果第k行的皇后放在第j列與前面的皇后不衝突的話,開始放置第k+1個皇后
{
place[k]=j;
check(place, k + 1, n, res);
}
//如果衝突,則嘗試下一個位置
}
}
int totalNQueens(int n)
{
int res = 0;
int *place = new int[n];
check(place, 0, n, res);//初始放置第0行的皇后
return res;
}
相關文章
- LeetCode 52. N皇后 IILeetCode
- Leetcode 通過率最高的困難題 N皇后 II 【回溯解法-剪枝】LeetCode
- 每日一題之拉低通過率 回溯演算法 leetcode 51 N皇后每日一題演算法LeetCode
- N皇后問題
- leetcode演算法題解(Java版)-9-N皇后問題LeetCode演算法Java
- LeetCode每日一題: 按奇偶排序陣列 II(No.27)LeetCode每日一題排序陣列
- LeetCode每日一題: N叉樹的最大深度(No.559)LeetCode每日一題
- LeetCode每日一題:重複 N 次的元素(No.961)LeetCode每日一題
- N皇后問題(各種優化)優化
- leetcode每日一題LeetCode每日一題
- [每日一題]140. Word Break II每日一題
- 藍橋杯-N皇后
- Leetcode每日一題(1)LeetCode每日一題
- Leetcode每日一題:992.sort-array-by-parity-ii(按奇偶排序陣列Ⅱ)LeetCode每日一題排序陣列
- leetcode【每日一題】122. 買賣股票的最佳時機 II JavaLeetCode每日一題Java
- 演算法:N皇后二演算法
- 回溯法(排列樹)解決八(N)皇后問題
- 經典n皇后問題java程式碼實現Java
- LeetCode每日一題:sort colorsLeetCode每日一題
- 【leetcode】每日精選題詳解之59. 螺旋矩陣 IILeetCode矩陣
- 用棧+回溯+非遞迴解決N皇后問題遞迴
- [每日一題] 第十六題:n個骰子的點數每日一題
- LeetCode 每日一題「判定字元是否唯一」LeetCode每日一題字元
- 每日一道演算法題--leetcode 113--路徑總和II--python演算法LeetCodePython
- LeetCode每日一題:Nim遊戲(No.292)LeetCode每日一題遊戲
- LeetCode每日一題: 找不同(No.389)LeetCode每日一題
- LeetCode每日一題: 移除元素(No.27)LeetCode每日一題
- leetcode每日一題—19.刪除連結串列的倒數第N個結點LeetCode每日一題
- 每日leetcode——142. 環形連結串列 IILeetCode
- Leetcode-Read N Characters Given Read4 IILeetCode
- LeetCode每日一題: 移動零(No.283)LeetCode每日一題
- LeetCode每日一題:自除數(No.728)LeetCode每日一題
- LeetCode每日一題:迴文數(No.9)LeetCode每日一題
- LeetCode每日一題:兩數之和(No.1)LeetCode每日一題
- LeetCode每日一題:爬樓梯(No.70)LeetCode每日一題
- LeetCode每日一題: 排列硬幣(No.441)LeetCode每日一題
- LeetCode每日一題: 各位相加(No.258)LeetCode每日一題
- LeetCode每日一題:longest palindromic substringLeetCode每日一題