您的位置:首页 > 其它

HDU 2553 N皇后问题 (DFS)

2017-09-20 14:48 330 查看
/题意自己看,不会度娘
#include <stdio.h>
#include <string.h>
#include <math.h>
int qizi[20];
int flag[20];
int n;
int num;
int judge(int hang)
{
for(int i=1;i<hang;i++)//循环行
{
if(qizi[hang]==qizi[i]||abs((hang-i))==abs(qizi[hang]-qizi[i]))//查看是否同列或者同斜率,第二个条件没看懂的自己算下就懂了
return 0;
}
return 1;
}
int DFS(int hang)
{
if(hang==n+1)
num++;//当行为n+1时,说明到达边界
else
{
for(int i=1;i<=n;i++)//列
{
qizi[hang]=i;//qizi数组表示为当前坐标
if(judge(hang))
{
DFS(hang+1);//下下一行的棋
}
}
}
}
void mmp(int n)
{
DFS(1);
}
int main(int argc, char *argv[])
{
for(n=1;n<=10;n++)
{
num=0;
mmp(n);
flag
=num;
}//打表
int k;
while(scanf("%d",&k)!=EOF)
{
if(k==0)
break;
printf("%d\n",flag[k]);
}
return 0;
}
//Start-ZJ
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: