n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。
在這裡插入描述
上圖為 8 皇后問題的一種解法。
給定乙個整數 n,返回所有不同的 n 皇后問題的方案數。
示例1:
輸入: 4
輸出: 2
示例2:
輸入: 8
輸出: 92
本題可用dfs來解決。
下面以4皇后問題為例:
本題可以用dfs來確定每乙個皇后的位置,一行一行排,那麼第n個皇后就排在第n行。第n個皇后能在第n行的1->n列選擇乙個位置。
需要注意的是:每個皇后(注意是每乙個!)都不能在同一列,也不能在同一對角線。
那麼如何保證這兩點呢?首先,保證所有皇后不在同一列很好辦,只要每次判斷一下之前的皇后是否已經「佔據」了這一列即可。其次,要保證不在同一對角線,棋盤其實就是矩陣,每乙個位置都是乙個座標,我們可以通過橫縱座標之差來判斷是否在同一對角線上。如果兩個皇后橫座標之差的絕對值等於縱座標之差的絕對值,那麼這兩個皇后就在同一對角線上。
#include
using
namespace std;
int n;
int lie[
1005];
int ct=0;
void
dfs(
int x,
int y)
;//表示 第x個皇后此時在第x行y列
intmain()
void
dfs(
int x,
int y)
//表示 第x個皇后此時在第x行y列
for(
int i=
1;i<=n;i++
)else
if(j==0)}}}
N皇后問題(回溯做法)
相信大家都聽過經典的 八皇后 問題吧?這個遊戲要求在乙個8 8的棋盤上放置8個皇后,使8個皇后互相不攻擊 攻擊的含義是有兩個皇后在同一行或同一列或同一對角線上 桐桐對這個遊戲很感興趣,也很快解決了這個問題。可是,他想為自己增加一點難度,於是他想求出n皇后的解的情況。你能幫助她嗎?輸入格式 一行,僅有...
N皇后問題 DFS
在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。output 共有若...
N皇后問題 dfs)
在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。output 共有若...