會下西洋棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將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的皇后串。
364
25
25713864
17582463
36824175
#include
#include
#include
using
namespace std;
const
int n =8;
//八皇后問題
int p[9]
=;//存放一組正確的解法
char ans[93]
[9]=
;//存放最終結果,以乙個數字形式展現
bool hashtable[n +1]
;//雜湊,以空間換時間,由於數字不能重複,需要這麼乙個標記作為重複與否判斷標記
int count =1;
//表示當前是按字典從小到大排序第幾個解
int temp =0;
/* * 八皇后問題主體函式和按字典從小到大實現1~n全排列本質上是一致的
* 1~n全排列可以看拆分成:「1」開頭的全排列,「2」開頭的全排列等等,然後以此類推,
* 在上面分類基礎上已經確定第乙個位置數字了 ,再從後一位置繼續相同的分治
*/void
generate
(int index)
count++
;return;}
/* * 當皇后放在index列 第x行時
* 判斷對角線是否滿足要求,不滿足則結束
* 滿足要求則遞迴,判斷後一位置
* 注:index位置的行號是從1~n迭代的
*/for(
int x =
1; x <= n; x++)}
if(flag)}}
}int
main()
}return0;
}
n皇后,排列樹
package com.alo.offer public class wolfqueen n代表當前是第幾個皇后 param n 皇后n在array n 列 int a private void check int n 從第一列開始放值,然後判斷是否和本行本列本斜線有衝突,如果ok,就進入下一行的邏...
Codeup墓地 問題 A 日期差值
有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的我們規定他們之間的天數為兩天。有多組資料,每組資料有兩行,分別表示兩個日期,形式為yyyymmdd 每組資料輸出一行,即日期差值 20130101 201301055 include int isleapyear int year 判斷是否是閏年...
Codeup遞迴 八皇后
會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2.b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道8皇后...