DFS-C - Nクイーン問題

C - Nクイーン問題

チェッカーボード-N * N N、それらが(互いに、すなわち、同一行、同一列内の任意の2つのクイーンが許可されていない攻撃しないように配置クイーンズ、斜めの角度で基板フレーム45に許可されていません。
あなたのタスクは、指定されたNのために、どのように多くの正当そこに置か得る方法、です。

入力総行数、各行の正の整数N≤10、クイーンボードの数を表し、n = 0の場合は、終了を示します。ライン出力数、各ライン異なる配置クイーン対応する入力ラインの数を表す正の整数。サンプル入力

1 
8 
5 
0

サンプル出力

1 
92 
10
 
1の#include <ビット/ STDC ++ H.>
 2  使用して 名前空間STD;
 3  
。4  int型N-、SUM;
 5  int型の A [ 10 ]; //はクイーン横軸の各ラインを格納
6。 int型 B [ 10 ]; // プレイテーブル
7  
8  int型チェック(INT X){
 9。     ためINT I = 0 ; I <X; I ++ 10          IF(A [I] == A [X] || ABS(A [X] -a [I])= ABS =(XI))     戻り 0 ;
 11      リターン 。1 ;
12  }
 13の 
14  空隙 DFS(INT X){
 15      のためにINT iは= 0、I <N; I ++ ){
 16          [X] = I。
17          であれば(チェック(X)){
 18              であれば(x == N- 1)の和++ 19の             他の             DFS(X + 1 )。
20          }
 21      }
 22  }
 23  
24  INT メイン(){
 25      ながら(〜のscanf(" %d個"、&​​N)&&N){
 26          であれば(B [N])のprintf(" %D \ n " 、B [N])。
27          {
 28              和= 0 29の              DFS(0 )。
30              B [N] = 合計。
31              のprintf(" %dの\ n " 、合計)。
32          }
 33          
34      }
 35 }
 

 

 

おすすめ

転載: www.cnblogs.com/0424lrn/p/12232684.html