原题:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1423
时间:2014.1.31
类型:回溯,递归
源码:
#include<cstdio>
#include<iostream>
using namespace std;
bool none=true;
int a[10],n;
bool s[10]={false},zx[20]={false},yx[20]={false};
void print()
{
for(int i=1;i<n;i++) { printf("%5d",a[i]); }
printf("%5d\n",a[n]);
}
void search(int l)
{
if(l==n+1) { if(none) { none=false; } print(); return;}
for(int j=1;j<=n;j++)
{
if(s[j] || zx[l-j+n-1] || yx[l+j]) { continue; }
a[l]=j;
s[j]=true;
zx[l-j+n-1]=true;
yx[l+j]=true;
search(l+1);
s[j]=false;
zx[l-j+n-1]=false;
yx[l+j]=false;
}
}
int main()
{
scanf("%d",&n);
search(1);
if(none) printf("no solute!");
return 0;
}
最后状态:AC
总结:不知道为什么一开始一直错,后来采用一本通上面的方法就A了
PS:用cstdio里面的输入输出可以有效减少时间