之前没有打表超时了:
#include<cstdio>
int cnt;
int n;
int f[12][12];
int result[11];
bool isval(int x,int y)
{
int i,j;
for(i=1;i<n+1;i++)
{
if(f[i][y]==-1)return false;
if(f[x][i]==-1)return false;
for(j=1;j<n+1;j++)
if((i+j==x+y||i-j==x-y)&&f[i][j]==-1)
return false;
}
return true;
}
void dfs(int x)
{
int i;
if(x==n+1)
{
cnt++;
return;
}
else
for(i=1;i<n+1;i++)
if(isval(x,i))
{
f[x][i]=-1;
dfs(x+1);
f[x][i]=0;
}
}
int main()
{
int i;
for(i=1;i<11;i++)
{
cnt=0;
n=i;
dfs(1);
result[i]=cnt;
}
while(scanf("%d",&n),n)
{
printf("%d\n",result[n]);
// cnt=0;
//dfs(1);
// printf("%d\n",cnt);
}
return 0;
}
hdu2553
最新推荐文章于 2021-06-08 18:22:21 发布