王アルゴリズムのトレーニング、伝説
制限時間:メモリ制限が1.0S:256.0メガバイト
問題の説明
、地球の人々はチェスでは、太陽、輝きのように、ライオンのように、それは水平、強い、対角位置を制御できることを知っています。
中国の人々の清のドラマを読む寺院は、ステップ不吉な場所によって驚くべきステップであることを知っています。女王は、各影響の自分の球を持っているだけでなく、常に平和のうちに生存する方法を見つけます。
すべての中国の人々が......神聖皇帝の権力こと、伴君如伴虎、死ぬこと竜岩に触れ知っている
*今nが存在し、N宮殿の、王は彼とこれらのグリッドの周りの9つのグリッド位置の合計を占めています(グリッドのエッジの宮殿で王が9未満占める可能性がある場合)女王は使用できません。もちろん、女王は王を攻撃しません。
今、私たちは、私は場所にプログラムのどのように多くの種類の、求めることができる王の位置(x、y)(列のx行yの上にあるキング、X、Yおよびスタートライン1など)ことを知っているのn彼らはお互いを攻撃することはできませんので、クイーンズ。
入力フォーマット
スケール行、三つの整数、および王の位置の宮殿を表します
出力フォーマットは、
女王の数を表す整数スキームnを配置しました
サンプル入力
822
サンプル出力
10
データサイズと表記
N <= 12
#include <stdio.h>
int n;
int x, y;
int queens[15];
int n_queens;
int solutions;
int abs(int x)
{
return x < 0 ? -x : x;
}
int is_valid(int row, int col)
{
if (abs(row - x) <= 1 && abs(col - y) <= 1)
return 0;
for (int i = 0; i < n_queens; ++i)
{
if (col == queens[i] || abs(row - (i+1)) == abs(col - queens[i]))
return 0;
}
return 1;
}
void put_queen(int row)
{
if (row > n)
{
solutions++;
return;
}
for (int col = 1; col <= n; ++col)
{
if (is_valid(row, col))
{
queens[n_queens++] = col;
put_queen(row + 1);
n_queens--;
}
}
}
int main()
{
scanf("%d %d %d", &n, &x, &y);
n_queens = 0;
solutions = 0;
put_queen(1);
printf("%d", solutions);
return 0;
}