八皇后
總時間限制: 1000ms 記憶體限制: 65536kb
描述
會下西洋棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上(有8 * 8個方格),使它們誰也不能被吃掉!這就是著名的八皇后問題。
對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a=b1b2…b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道8皇后問題一共有92組解(即92個不同的皇后串)。
給出乙個數b,要求輸出第b個串。串的比較是這樣的:皇后串x置於皇后串y之前,當且僅當將x視為整數時比y小。
輸入
第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括乙個正整數b(1 <= b <= 92)
輸出
輸出有n行,每行輸出對應乙個輸入。輸出應是乙個正整數,是對應於b的皇后串。
樣例輸入
2
192
樣例輸出
15863724
84136275
思路點拔:如圖,皇后控制的區域有同行,同列和兩條對角線,所以需要回溯這四種方向。
將乙個皇后的控制區域賦值為1,再遞迴放置下乙個皇后,當八個皇后放完時,就恢復原始狀態(回溯),搜尋下一種情況,這就是經典的八皇后問題
上**!!
#include
int a[105][10],ans,b[105],lie[105],zx[105],yx[105],s[105];
void dfs(int t) //深搜
return;
}for(int i=1;i<=8;i++)
}}int main()
printf("\n");
}return0;}
//非常經典的搜尋題,再多回味回味
八皇后 簡單深搜
檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 4 6 1...
八皇后問題(dfs深搜)
題目 洛谷 p1219 乙個如下的 6 6 的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列 2 4 6 1 3 5來描述,第 i個數字表示在第 i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5...
題目 八 n皇后C 解 深搜
回溯法也稱試探法,用於尋找乙個問題的可行解。該方法首先暫時泛起問題規模大小的閒置,從最小規模開始將問題的候選解按某種順序逐一列舉和檢驗,選擇乙個可行的候選解,然後擴大規模,繼續試探。打到要求的規模時,所有的候選解就形成了問題的可行解。8皇后和n皇后的問題就是基於回溯法解決的。題目要求 在乙個8 8的...