Nクイーン
問題の説明
チェッカーボード-NにN * Nクイーンは、(それらが互いを攻撃しないように配置され、すなわち、同じ列内の任意の2つのクイーンは、同じ列が、斜めの角度で基板フレーム45に許可されていない許可しません。
あなたのタスクは、指定されたNのために、どのように多くのそこに置か取得の合法的な方法です。
あなたのタスクは、指定されたNのために、どのように多くのそこに置か取得の合法的な方法です。
入力
が正の整数N≤10のいくつかの行があり、クイーンボードの数を表し、n = 0の場合は、終了を示します。
出力
行数、各入力ラインに対応する異なる配置の女王の数を表す正の整数です。
サンプル入力
1
8
5
0
サンプル出力
1
92
10
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 int型N、TOT = 0。 int型COL [12] = {0}。 BOOLチェック(int型C、int型R){//当前坐标(R、C) のための(INT i = 0; I <R、iは++){ IF(COL [I] == C || ABS(COL [I] -c)== ABS(IR))はfalseを返します。 } trueを返します。 } ボイドDFS(INT R){ IF(R == N){ TOT ++。 返します。 } のための(INT C = 0; C <N; C ++){ (チェック(C、R)){もし COL [R] = Cを、 DFS(R + 1)。 } } } int型のmain(){ int型ANS [12] = {0}。 用(n = 0であり、n <= 10、N ++){ TOT = 0。 memset(COL、0、はsizeof(COL))。 DFS(0)。 ANS [n]はTOTを=。 } 一方、(〜のscanf( "%d個"、&N)&& N){ COUT << ANS [N] << ENDL。 } 0を返します。 }