搜尋入門練習題10 八皇后問題輸出方案 題解

2022-08-19 21:57:15 字數 1149 閱讀 7992

題目出處:《資訊學奧賽一本通》第五章上機練習2

題目描述

輸入格式

無輸入。

輸出格式

按給定順序和格式輸出所有八皇后問題的解(見樣例輸出)

樣例輸入

無輸入。

樣例輸出

no. 1

1 0 0 0 0 0 0 0

0 0 0 0 1 0 0 0

0 0 0 0 0 0 0 1

0 0 0 0 0 1 0 0

0 0 1 0 0 0 0 0

0 0 0 0 0 0 1 0

0 1 0 0 0 0 0 0

0 0 0 1 0 0 0 0

no. 2

1 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

0 0 0 0 0 0 0 1

0 0 1 0 0 0 0 0

0 0 0 0 0 0 1 0

0 0 0 1 0 0 0 0

0 1 0 0 0 0 0 0

0 0 0 0 1 0 0 0

... 以下省略

題目分析

這道題其實和我們之前的「八皇后問題」非常類似。

只不過之前只是計數,而我們這裡需要輸出所有方案,所以在原來的基礎上新增乙個輸出方案的函式output()即可。

實現**如下:

#include using namespace std;

int ans[9], cnt; // ans[i]用於記錄第i行皇后列號,cnt用於記錄方案數

// attack函式用於判斷(x1,y1)和(x2,y2)兩個點是否會互相攻擊

// 返回true:會互相攻擊到;返回false:不會互相攻擊到

bool attack(int x1, int y1, int x2, int y2)

// output函式用於輸出一種方案

void output()

}// f函式用於在第id行嘗試性地放乙個i,然後遞迴地去id+1行放

void f(int id)

for (int i = 1; i <= 8; i ++)

}if (flag)

}}int main()

搜尋入門練習題5 八皇后問題 題解

題目描述 輸出格式 輸出乙個整數,用於表示八皇后問題的放置方案。題目分析 首先我們用 x,y 來表示棋盤上第 x 行第 y 列的格仔的座標。那麼,兩個皇后 x 1,y 1 和 x 2,y 2 會互相攻擊當且僅當滿足如下條件之一 我們可以用深度優先搜尋來解決這道題。我們可以發現的是,要想在 8 tim...

搜尋練習題(1)八皇后

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

C語言練習題 八皇后問題

c和指標 練習題8.8 參考至 問題描述 皇后是西洋棋中威力最大的棋子。在下面所示的棋盤上,皇后可以攻擊位於箭頭所覆蓋位置的所有棋子。我們能不能把n個皇后放在棋盤 n n 上,它們中的任何乙個都無法攻擊其餘的皇后?請編寫程式輸出皇后的擺放方案,並找出一共有幾種方法。char board n 2 n ...