描述
會下西洋棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將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
限制
時間限制: 1000 ms
記憶體限制: 65536 kb
演算法思想
利用遞迴與雜湊表,不斷地搜尋可用序列
#include
//#include
#include
#include
//#include
//#include
//#include
using
namespace std;
const
int maxn=11;
//最大值
int cnt=
0,n,p[maxn]
,hashtable[maxn]
=,a[
100][9
]=};
//p為當前排列,hashtable記錄x是否已經在表中
void
generatep
(int index)}}
if(flag)
}//return;
}for
(int x=
1;x<=n;x++)}
}int
main()
printf
("\n");
}return0;
}
八皇后問題詳細解法
問題描述 在 8 8的棋盤上,放置8個 皇后 棋子 使兩兩之 間互不攻擊。所謂互不攻擊是說任何兩個皇后都要滿足 1 不在棋盤的同一行 2 不在棋盤的同一列 3 不在棋盤的同一對角線上。求 這8個皇后中的每乙個 應該擺放在哪一列。演算法分析 陣列 column down up 分別用來標記衝突,col...
另類的八皇后求解法
heckboard.h pragma once class checkboard heckboard.cpp include stdafx.h include heckboard.h checkboard checkboard void cout 0 初始化棋盤,使得每列只有乙個棋子 checkbo...
八皇后問題 遞迴求解法
include include include 八皇后問題遞迴方法實現 using namespace std ofstream file 用以計數計算結果的數目 int count 1 列印的棋盤其中列印1的位置是皇后的位置,0空位。這裡因為在控制台看不到全部,所有做了在檔案中輸出所有的解 int...