http://ac.jobdu.com/problem.php?pid=1140
#include <stdio.h>
#include <cstring>
static int map[8][8];
static int pos[8];
static int ans[92],cn;
void deploy(int i, int j, int v){
int _i=i,_j=j;
while(_i<8) map[_i++][_j] += v;
_i=i,_j=j;
while(_i<8 && _j<8 && 0<=_i && 0 <= _j) map[_i++][_j++] += v;
_i=i,_j=j;
while(_i<8 && _j<8 && 0<=_i && 0 <= _j) map[_i++][_j--] += v;
}
void dfs(int level){
if(level == 8){
int res = 0;
for (int i = 0; i < 8; ++i) {
res *= 10;
res += pos[i]+1;
}
ans[cn++] = res;
return;
}
for (int i = 0; i < 8; ++i) {
if(map[level][i] == 0 ){
pos[level] = i;
deploy(level,i,i+1);
dfs(level+1);
deploy(level,i,-(i+1));
}
}
}
void solve(){
memset(ans,0,sizeof(ans));
cn = 0;
dfs(0);
}
int main(){
int n,ith;
solve();
while(scanf("%d",&n)!=EOF){
for (int i = 0; i < n; ++i) {
scanf("%d",&ith);
printf("%d\n",ans[ith-1]);
}
}
}