題目
會下西洋棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將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 1
92樣例輸出
15863724
84136275
//錯誤**,按題目要求a=b1b2...b8,其中bi為相應擺法中第i行皇后所處的列數。
#include
using
namespace
std;
//用來儲存方案 ,下標都是從1開始
int a[9][9];
int visrow[9]; //行
int visleftincline[17];//左斜線 使用的時候 row+column
int visrightincline[16]; //右斜線,使用的時候row-column+8
int anscount=0;
int b[93][10];
void print() }}
} void search(int column)
else}}
}int main()
//ac**:
//明明是從第一列到第八列的行數的組合,題目絕對有問題
#include
using
namespace
std;
//用來儲存方案 ,下標都是從1開始
int a[93][9];
int visrow[9]; //行
int visleftincline[17];//左斜線 使用的時候 row+column
int visrightincline[16]; //右斜線,使用的時候row-column+8
int anscount=1;
void init()
void print()
}else}}
}int main()
回溯法 皇后
皇后是排列樹,也是 叉樹,排列數要求 n後不在對角線上 叉樹 n後不在對角線上且不在同一列上。n後不在對角線上且不在同一列上。通過畫圖,可以輕易得到 對角線,行差距 列差距 def place self,k for i in range k ifabs k i abs self.solution k...
n皇后(回溯)
題目描述 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。輸入測試資料由多組測試樣例組成。每組測試資料第一行輸入乙個正整數 n 1 n 10 輸出輸出有多少種合...
八皇后回溯
八皇后問題 在8x8格棋盤上擺放8個皇后,任意兩個皇后不能處於同一行 同一列 同一斜線上,問有多少種擺法。思路 第乙個皇后放在第一行第一列 第二個皇后從第二行第一列開始檢測,如果不行,放在第二列 第三列 一直到放完所有皇后,如果中途發現有衝突,回溯改變先前放置的皇后位置 使用乙個一位陣列表示,下標表...