(回溯2)8皇后

2021-08-20 17:21:42 字數 1388 閱讀 6358

題目

會下西洋棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將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個皇后,任意兩個皇后不能處於同一行 同一列 同一斜線上,問有多少種擺法。思路 第乙個皇后放在第一行第一列 第二個皇后從第二行第一列開始檢測,如果不行,放在第二列 第三列 一直到放完所有皇后,如果中途發現有衝突,回溯改變先前放置的皇后位置 使用乙個一位陣列表示,下標表...