チェッカーボード-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 }