#include"iostream"
#include"stdlib.h"
#include <math.h>
using namespace std;
int a[100];
int c[11];
int n,sum=0;
int test(int row, int col)
{
int i;
for (i=1; i<row;++i)
{
if (a[i]==col||abs(i-row)==abs(a[i]-col))
return 0;
}
return 1;
}
void Trial(int i,int n) {
if (i>n) sum++;
else
for(int j=1; j<=n; j++) {
a[i]=j;
if (test(i,j)) Trial(i+1,n);
a[i]=-100;
}
}
int main(void)
{
c[1]=1;
for(int k=2;k<=10;k++)
{
for(int i=1;i<=k;i++) a[i]=-100;
sum=0;
for(int i=1;i<=k;i++)
{
a[1]=i;
Trial(2,k);
}
c[k]=sum;
}
cin>>n;
while(n!=0)
{
cout<<c[n]<<endl;
cin>>n;
}
return 0;
}
N皇后问题,DFS所有状态即可,判断是否能放棋子的步骤可以适当做简化,另外这种题目要注意打表,因为是简单的输入而且数据范围较小,如果不打表每次都对输入进行计算会因为测试数据过多超时
day3 HDU 2553 N皇后问题
最新推荐文章于 2021-04-20 10:56:04 发布