題目出處:《資訊學奧賽一本通》第五章上機練習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 ...