xtu p1042 八皇后(樸素解法)

2021-10-03 04:41:18 字數 1233 閱讀 8261

描述

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