n皇后問題(DFS做法)

2021-10-19 11:15:11 字數 1070 閱讀 3086

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 共有若...