演算法學習 N皇后問題

2021-08-26 05:50:27 字數 1139 閱讀 6684

問題 d: 八皇后

時間限制: 1 sec 記憶體限制: 32 mb

題目描述

會下西洋棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將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的皇后串。

樣例輸入

3 6

4 25

樣例輸出

25713864

17582463

36824175

解題思路

dfs層層遍歷,找出符合要求的陣列

submission

#include 

#include

#include

#include

#define n 8

typedef

struct point point;

point pts[n];

typedef

struct

string string;

string strs[93];

int windex, count;

int isok(int x, int y)

} return flag;

}void bfseight(int level)

strs[windex].str[i] = '\0';

windex ++;

} else }}}

int cmp(const

void *p, const

void *q)

int main(void)

return

0;}

演算法學習之路 N皇后問題

n皇后問題,在棋盤上放n個皇后,要求互相之間不能攻擊,求問有多少種情況 輸入格式 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。輸出格式 共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。輸入樣例 18 50輸出樣例 192 10八皇后問題的拓展,回溯...

演算法 n皇后問題

題目描述 乙個 n n 的棋盤,要在上面放 n 個皇后。規則 兩個皇后之間如果是同列 同行 同對角線它們會互相攻擊。也就 是 說 棋盤上的任意兩個皇后不能為同列 同行 同對角線。演算法思想 q j 表示乙個解的空間即儲存一組可行解的陣列,j表示行數,q j 的值表示j行可以放置皇后的所在列數,根據任...

(演算法)N皇后問題

八皇后問題 在8 x 8的西洋棋上擺放八個皇后,使其不能相互攻擊,即任意兩個皇后不得處於同一行,同一列或者同意對角線上,求出所有符合條件的擺法。1 回溯法 資料結構 由於8個皇后不能處在同一行,那麼肯定每個皇后佔據一行,這樣可以定義乙個陣列a 8 陣列中第i個數字,即a i 表示位於第i行的皇后的列...