2046年問題Dエイトクイーンズ

   

タイトル説明

 

人々は非常に明確なチェスをする:女王は、水平、垂直、対角のステップ数に別の部分を食べることができません。どのようにチェス盤の8つのクイーン(8×8の正方形)、彼らは誰でも食べることができないように!これは有名な8つのクイーン問題です。 
8. BI iは振り子クイーン位置行の列の対応する数である対応する配列の定義の要件女王、すなわちA = B1B2 ... B8を満たすために女王を配置するための方法。図8は、解のセット92のクイーンズの合計が知られている(すなわち、92本の異なるストリングの女王)。
所与の数b、必要な出力列のB。クイーンクイーンはならY、ストリング列X yを配置する前に、xは考え整数よりも小さい場合にのみ:文字列比較をするようなものです。

 

エントリー

 

行1は、n個の入力ラインに続いて、テストデータのn個の集合です。正の整数bを含む行を表す試験データの各セット、(1 <= bの<= 92)

 

輸出

 

N個の出力ラインがあり、各出力ラインは、入力に対応します。出力は、正の整数でなければならない、(b)は対応する文字列の女王です。

サンプル入力

3 
6 
4 
25

サンプル出力

25713864 
17582463 
36824175は、


主対角線を処理するために、
左の対角は[iがNを+] [JN] ;
の右側対角線[iが+ N] [J +

n]は、 境界か否かを決定することに留意されたいです。


#include <iostreamの>
する#include <cstdioを>
使用して名前空間STD;
int型N-、Q、G //マークされた[9] [8] [9]、
文字列STRを[93];
ボイドDFS(INT深さ){
 IF(深さ{9 ==)
  ; ++ Z
  。(INT 1 = Aため; <= 8; ++){
  STR [Z] + =(CHAR)(Q [A] +48);
 }
  リターン;
}
 (INTのためのI = 1; I <= 8; I ++){
  IF){((G [深さ] [I]!)
  のために(INT J = 1; J <= 8; J ++){
  。G [深さ] [J] + = 1 ;  G [J] [I] + = 1; //標識列の   (。。(奥行き+ J)<= 8 &&(Iは、J + 1)<= 8)IF   G [奥行き+ J] + = [Iは、Jを+] 1。 ; //右斜めのマークのための  IF((奥行き+ J <= 8)&&(IJ)> 0)
 



  G [奥行き+ J] [IJ ] + = 1; // Aは対角マークを残し
 }
  Q [深さ] = I;
  DFS(。+深さ1);
  
  (INT 1 = J; J <= 8; J ++)のため{
  G [深さ] [J] - = 1; 
  G [J] [I] - = 1;
  IF((深さ+ J)<= 8 &&(Iは、J + 1)<= 8)
  G [奥行き+ J] [I + J] - = 1;
  IF((奥行き+ J <= 8)&&(のIJ)> 0)
  G [奥行き+ J]の[IJ] - = 1;
 }
 }
 そうでなければ続行;
 }
 リターン;
}
メインINT() {
 int型のZ;
 CIN N - >>;
 DFS(1);
 {(; Iは、N <I ++はI = 0の整数)のための
  CIN >> Z、
  COUT << STR [Z] << ENDL;
 }
 戻り0;
}


I問題の最初の解決策は、多くの人が持っているホワイトペーパーは非常に良いではない、希望が許します。私は^〜^頑張っていきます。
[ 送信 ] [ 状態 ]

おすすめ

転載: www.cnblogs.com/nqc123/p/11294657.html