记录编号 |
217422 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[USACO 1.5.4] 跳棋的挑战 |
最终得分 |
100 |
用户昵称 |
liu_runda |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2016-01-03 16:16:10 |
内存使用 |
0.29 MiB |
显示代码纯文本
#include<cstdio>
#include<cmath>
using namespace std;
int sol[16]={0,0,0,0,0,0,4,40,92,352,724,2680,14200,73712,365596};
int ans;
int row[16];//row[i]:第i行的跳棋在哪一列
bool lined[16];//lined[i]:第i列是否有跳棋
int n;
void dfs(int r){
if(ans==3)return;
if(r==n+1){
ans++;
for(int i = 1;i<n;++i){
printf("%d ",row[i]);
}
printf("%d\n",row[n]);
}else{
for(int i = 1;i<=n;++i){
if(!lined[i]){
bool flag=true;
for(int j = 1;j<r;++j){
if(((r+i)==(j+row[j]))||r-i==j-row[j]){
flag=false;
break;
}
}
if(flag){
lined[i] = true;
row[r] = i;
dfs(r+1);
lined[i] = false;
}
}
}
}
}
int main(){
freopen("checker.in","r",stdin);
freopen("checker.out","w",stdout);
scanf("%d",&n);
dfs(1);
printf("%d",sol[n]);
fclose(stdin);fclose(stdout);
return 0;
}