【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;
}
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步