hdu2553解题报告

经典的dfs:N皇后,开始看了刘汝佳前辈的书..代码简单明了...就是理解起来有点....哎哎...于是就自己用dfs模板加了一个判断,还有就是这里用到打表...对于N<=10 我们可以把N从1~10的情况都dfs出来存在一个数组,后面就直接取用,如果对于每一次输入dfs就会超时....

因为是逐行填写,,那么就只要考虑下图的三个方向(红的的)

hdu2553解题报告_第1张图片

上马:

#include
#include

int N;
int ans;
int map[14][14];

int vis[3][2]={{-1,1},{-1,0},{-1,-1}};//这里是判断要用到的,对于这个位置的左右对角,和这一列看有没有填写过

bool judg(int x,int y)
{
	for(int i=0;i<3;i++)//因为这里是逐行填写,就不用考虑这一行有没有出现,只要考虑三个方向
	{
		int a=x+vis[i][0],b=y+vis[i][1];
		while(!map[a][b])
		{
			a+=vis[i][0];b+=vis[i][1];
		}
		if(a>=0&&b>=0&&b
个人愚昧观点...欢迎指正与讨论

你可能感兴趣的:(搜索)