hdu2553简单八皇后问题(简单深搜+回溯)

思路:每一列的所有行的情况尝试,如果该行的点符合条件,就增加一层继续搜索,然后如果能够顺利放8点次数加1;

注意:结果出来要打在一张表里,否则每次都去尝试的话会超时

代码如下:

#include<stdio.h>
#include<string.h>

int map[11][11],n,cnt;
bool pan(int x,int y)
{
	int i,j;
	for(i=0;i<y;i++)
		if(map[x][i])
			return false;
	for(i=x-1,j=y-1;i>=0&&j>=0;i--,j--)
		if(map[i][j])
			return false;
	for(i=x+1,j=y-1;i<n&&j>=0;i++,j--)
		if(map[i][j])
			return false;
	return true;
}

void dfs(int size)
{
	if(size==n)
		cnt++;
	for(int i=0;i<n;i++)
	{
		if(!map[i][size]&&pan(i,size))
		{
			map[i][size]=1;
			dfs(size+1);
			map[i][size]=0;
		}
	}
	return ;
}

int main()
{
	int i;
	int result[11];
	for(i=0;i<11;i++)
	{
		memset(map,0,sizeof(map));
		n=i+1;
		cnt=0;
		dfs(0);
		result[i]=cnt;
	}
	while(~scanf("%d",&n)&&n)
	{
		printf("%d\n",result[n-1]);
	}
	return 0;
}
巩固一下深搜以及回溯思路

全部评论

相关推荐

白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
点赞 评论 收藏
分享
鼠鼠没有找到暑期实习,简历太空了,感觉直接去秋招会完蛋,这个时间点找个日常实习混个简历,边实习边准备秋招有没有搞头啊
梦想是成为七海千秋:可以的完全可以的,找不到暑期就找日常,秋招之前还是有很多时间可以实习的,哪怕只实习了一个月都可以写在简历上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务