N皇后问题
2016-02-04 17:25
190 查看
一道挺坑爹的搜索题目,按照写的方法结果TLE了后来想想毕竟题目给的条件有限制
直接打表过了...
附上方法:
a,b,c数组表示横竖斜的线,等于0表示线上没有棋子,是用的递归搜索
#include<stdio.h>
#include<string.h>
int sum,n,a[15],b[25],c[25];
void dfs(int i,int num)
{
int j;
if(num==n)
sum++;
else
{
for(j=1;j<=n;j++)
{
if(a[j]==0&&b[i+j]==0&&c[n-i+1+j]==0)
{
num++;
a[j]=-1;
b[i+j]=-1;
c[n-i+1+j]=-1;
dfs(i+1,num);
a[j]=0;
b[i+j]=0;
c[n-i+1+j]=0;
num--;
}
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
sum=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
dfs(1,0);
printf("%d\n",sum);
}
return 0;
}
目前没有写出直接过的方法,想过一种就求了之后放在数组然后输入多少再找对应的但是没有去实现
#include<stdio.h>
int main()
{
int a[11]={0,1,0,0,2,10,4,40,92,352,724},n;
while(scanf("%d",&n)!=EOF&&n)
{
printf("%d\n",a
);
}
return 0;
}
直接打表过了...
附上方法:
a,b,c数组表示横竖斜的线,等于0表示线上没有棋子,是用的递归搜索
#include<stdio.h>
#include<string.h>
int sum,n,a[15],b[25],c[25];
void dfs(int i,int num)
{
int j;
if(num==n)
sum++;
else
{
for(j=1;j<=n;j++)
{
if(a[j]==0&&b[i+j]==0&&c[n-i+1+j]==0)
{
num++;
a[j]=-1;
b[i+j]=-1;
c[n-i+1+j]=-1;
dfs(i+1,num);
a[j]=0;
b[i+j]=0;
c[n-i+1+j]=0;
num--;
}
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
sum=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
dfs(1,0);
printf("%d\n",sum);
}
return 0;
}
目前没有写出直接过的方法,想过一种就求了之后放在数组然后输入多少再找对应的但是没有去实现
#include<stdio.h>
int main()
{
int a[11]={0,1,0,0,2,10,4,40,92,352,724},n;
while(scanf("%d",&n)!=EOF&&n)
{
printf("%d\n",a
);
}
return 0;
}
相关文章推荐
- N皇后问题
- hdu2553 N皇后问题
- n皇后问题的两种递归方法C语言实现
- N皇后问题
- n皇后问题(回溯法)
- 八皇后问题
- HDU - 2553 N皇后问题
- HDU2553 N皇后问题(回溯+打表)
- 第1次实验 - NPC问题(回溯算法、聚类分析)
- 看数据结构写代码(34) 树与回溯法(二)排序树(8皇后问题)
- N皇后问题的一般解法--回溯法
- N皇后问题
- 递归与迭代法求解N皇后问题
- SPOJ 1771 NQUEEN (DLX解n皇后问题)
- 南邮 OJ 1319 n皇后问题
- HDU 2553 N皇后问题
- N 皇后问题-回溯法
- N皇后问题
- Hdu oj 2553 N皇后问题(回溯加预处理)
- N皇后问题的c++解法