hdu 2553 N皇后
Posted foreveroier
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 2553 N皇后相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
int x=0,k=1;char c=getchar();
while(c<'0' || c>'9'){if(c=='-') k=0;c=getchar();}
while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
return k?x:-x;
}
int m[20],k,ans[20];
bool check(int x)
{
for(int i=x-1;i>=1;i--) if(m[i]==m[x] || abs(m[i]-m[x])==abs(i-x)) return 0;//是否在同行或同列或同斜行
return 1;
}
void dfs(int x)
{
if(x==k)//如果到了该到的数量
{
ans[k]++;//当前答案加 1
return;
}
for(int i=1;i<=k;i++)//从一循环至最多皇后数
{
m[x+1]=i;//标记
if(check(x+1)) dfs(x+1);//继续往后递归
}
}
int n;
int main()
{
for(int i=1;i<=10;i++)//打表
{
k=i;//将 k 赋值为 i 也就是最多皇后数
dfs(0);//从 0 开始递归
}
while(n=read())//输入
{
if(!n) break;
printf("%d
",ans[n]);//输出
}
return 0;
}
以上是关于hdu 2553 N皇后的主要内容,如果未能解决你的问题,请参考以下文章