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
#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
相关文章推荐
- 【HDU】2553 - N皇后问题(dfs)
- HDU - 2553:N皇后问题(经典DFS)
- 文章标题 HDU 2553 : N皇后问题 (DFS)
- HDU 2553 (DFS) N皇后问题
- hdu 2553 N皇后问题 dfs回溯
- HDU 2553 N皇后问题(深搜DFS)
- hdu 2553 N皇后问题【dfs】
- hdu 2553 N皇后问题(基本dfs)
- hdu 2553 N皇后问题(dfs)
- HDU 2553 N皇后问题 (DFS+回溯)
- hdu 2553 N皇后问题(有点坑爹的深搜题dfs)
- hdu 2553 N皇后问题(dfs)
- hdu 2553 N皇后问题(DFS+回溯)
- HDU-2553-N皇后问题【DFS】
- 【DFS】hdu 2553 N皇后问题
- HDU 2553 N皇后问题 (DFS_回溯)
- hdu 2553 N皇后问题 (dfs 打表)
- HDU 2553 N皇后问题 (简单DFS入门)
- hdu 2553 N皇后问题 经典dfs
- hdu 2553:N皇后问题(DFS遍历,水题)