【UVa】439 Knight Moves(dfs)

题目

题目
 


 

分析

没有估价函数的IDA。。。。。。
 


 

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int q,dx[10]={2,2,-2,-2,1,-1,1,-1},dy[10]={1,-1,1,-1,2,2,-2,-2},ans=1<<15;
bool vis[11][11];
int x1,y1,x2,y2;
bool in(int x,int y){ return x>=1&&x<=8&&y>=1&&y<=8; }
void dfs(int x,int y,int num,int p)
{
	if(p>q) return;
	if(x==x2 && y==y2)
	{
		ans=min(ans,num);
		return;
	}
	for(int i=0;i<8;i++)
	{
		int px=x+dx[i],py=y+dy[i];
		if(!in(px,py) || vis[px][py]) continue;
	//	printf("(%d,%d) -> (%d,%d)\n",x,y,px,py);
		vis[px][py]=true;
		dfs(px,py,num+1,p+1);
		vis[px][py]=false;
	}
	return;
}
int main()
{
	char s1[20],s2[20];
//	freopen("1.txt","w",stdout);
	while(scanf("%s%s",s1,s2)==2)
	{
		memset(vis,0,sizeof(vis));
		ans=1<<15;q=0;
		y1=s1[0]-'a'+1; x1=s1[1]-'0';
		y2=s2[0]-'a'+1; x2=s2[1]-'0';
		vis[x1][y1]=true;
		while(ans==1<<15)
		{
			dfs(x1,y1,0,0);
			q++;
		}
		printf("To get from %s to %s takes %d knight moves.\n",s1,s2,ans);
	}
	return 0;
}
posted @ 2017-12-08 22:56  noble_(noblex)  阅读(236)  评论(2编辑  收藏  举报
/* */