八皇后問題(dfs深搜)

2021-10-06 15:29:49 字數 1300 閱讀 4668

題目:(洛谷 p1219)

乙個如下的 6×6 的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行、每列有且只有乙個,每條對角線(包括兩條主對角線的所有平行線)上至多有乙個棋子。

上面的布局可以用序列 2 4 6 1 3 5來描述,第 i個數字表示在第 i行的相應位置有乙個棋子,如下:

行號 1 2 3 4 5 6

列號 2 4 6 1 3 5

這只是棋子放置的乙個解。請編乙個程式找出所有棋子放置的解。

並把它們以上面的序列方法輸出,解按字典順序排列。

請輸出前 3個解。最後一行是解的總個數。

輸入格式

一行乙個正整數 nnn,表示棋盤是 n×n大小的。

輸出格式

前三行為前三個解,每個解的兩個數字之間用乙個空格隔開。第四行只有乙個數字,表示解的總數。

輸入輸出樣例

輸入 #1

6輸出 #1

2 4 6 1 3 5 //第乙個解:

3 6 2 5 1 4 //第二個解:

4 1 5 2 6 3 //第三個解:

4 //總的解數:

說明/提示

【資料範圍】

對於 100%100%100% 的資料,6≤n≤13。

題解:

皇后是西洋棋中的棋子,可以在橫豎左斜右斜八個方向上移動,相同的皇后

不能處在其他皇后的這八個方向上,我們以行為深度進行搜尋,這樣還需記錄列、左斜、右斜三個方向是否能被訪問到。左斜的座標規律:橫縱座標值和為定值。右斜座標規律:橫縱座標之差為定值。)

**:

#include

using namespace std;

int n,ans,a[20];

bool line[20];//標記列元素是否被訪問;

bool l[40],r[40];//標記左斜與右斜元素是否被訪問;

void print()

for(int i=1;i<=n;i++)}}

int main()

執行結果:

|洛谷提交|:

八皇后(深搜)

八皇后 總時間限制 1000ms 記憶體限制 65536kb 描述 會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1...

n皇后問題 深搜回溯dfs

問題介紹 n皇后問題是乙個以西洋棋為背景的問題 如何能夠在n n的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。eg 在n n 格的棋盤上放置彼此不受攻擊的n 個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同...

八皇后 簡單深搜

檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 4 6 1...