poj-2754八皇后
タイトルの説明:
チェスができる人はよく知っています.皇后は横、縦、斜線で歩数を問わず他の駒を食べることができます.どのように8人の皇后を碁盤の上に置いて(8*8つの四角格子があります)、それらを誰も食べられないようにします!これが有名な八皇后問題です.ある要求を満たす8皇后の配置方法について、1つの皇后列aとそれに対応する、すなわちa=b 1 b 2を定義する...b 8であり、biは対応するスイング法におけるi行目の皇后の列数である.8皇后問題には92組の解(すなわち92個の異なる皇后列)があることが知られている.b番目の列の出力を要求する数bが与えられる.列の比較は、皇后列xが皇后列yの前に置かれ、xが整数と見なされる場合のみyより小さい.
入力:
1行目はテストデータのグループ数nであり,その後n行に従って入力する.各試験データのセットは1行を占め、正の整数b(1<=b<=92)を含む.
出力:
出力はn行あり、各行出力は1入力に対応する.出力は正の整数であり、bに対応する皇后列であるべきである.
サンプル入力:
サンプル出力:
チェスができる人はよく知っています.皇后は横、縦、斜線で歩数を問わず他の駒を食べることができます.どのように8人の皇后を碁盤の上に置いて(8*8つの四角格子があります)、それらを誰も食べられないようにします!これが有名な八皇后問題です.ある要求を満たす8皇后の配置方法について、1つの皇后列aとそれに対応する、すなわちa=b 1 b 2を定義する...b 8であり、biは対応するスイング法におけるi行目の皇后の列数である.8皇后問題には92組の解(すなわち92個の異なる皇后列)があることが知られている.b番目の列の出力を要求する数bが与えられる.列の比較は、皇后列xが皇后列yの前に置かれ、xが整数と見なされる場合のみyより小さい.
入力:
1行目はテストデータのグループ数nであり,その後n行に従って入力する.各試験データのセットは1行を占め、正の整数b(1<=b<=92)を含む.
出力:
出力はn行あり、各行出力は1入力に対応する.出力は正の整数であり、bに対応する皇后列であるべきである.
サンプル入力:
2
1
92
サンプル出力:
15863724
84136275
#include "iostream"
#include "stdio.h"
#include "math.h"
#include "vector"
#include "queue"
#include "memory.h"
#include "algorithm"
#include "string"
using namespace std;
int n,ind;
bool row[12],dia1[25],dia2[25];
int ans[96][10];//ans[92][8]
int res[96];
void Dfs(int q)
{
if(q>8)
{
ind++;
for(int i=1;i<=8;i++)
ans[ind][i]=ans[ind-1][i];
return;
}
for(int r=1;r<=8;r++)
{
if(row[r]&&dia1[r+q]&&dia2[8-q+r])
{
row[r]=dia1[r+q]=dia2[8-q+r]=false;
ans[ind][q]=r;
Dfs(q+1);
row[r]=dia1[r+q]=dia2[8-q+r]=true;
}
}
}
int main()
{
memset(row,true,sizeof(row));
memset(dia1,true,sizeof(dia1));
memset(dia2,true,sizeof(dia2));
ind=1;
Dfs(1);
scanf("%d",&n);
int i,x;
while(n--)
{
scanf("%d",&x);
for(i=1;i<=8;i++)
printf("%d",ans[x][i]);
cout<