题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=1372
BFS 水题。
原来骑士走的是“日”格
#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
int dx[]={-2,-2,-1,-1,1,1,2,2};
int dy[]={1,-1,2,-2,2,-2,1,-1};
int vis[10][10];
struct node
{
int x,y,time;
};
char s1[5],s2[5];//大小要>2,要不存不下\0;
void bfs(node &vs,node &vd,char *s1,char *s2)
{
queue<node>q;
node vn,vw;
vn.x=vs.x;
vn.y=vs.y;
vn.time=0;
vis[vn.x][vn.y]=1;
q.push(vn);
while(!q.empty())
{
vn=q.front();
q.pop();
if(vn.x==vd.x&&vn.y==vd.y)
{
printf("To get from %s to %s takes %d knight moves.\n",s1,s2,vn.time);
break;
}
else
{
for(int i=0;i<8;i++)
{
vw.x=vn.x+dx[i];
vw.y=vn.y+dy[i];
vw.time=vn.time+1;
if(!vis[vw.x][vw.y]&&vw.x>=1&&vw.x<=8&&vw.y>=1&&vw.y<=8)
{
vis[vw.x][vw.y]=1;
q.push(vw);
}
}
}
}
}
int main()
{
while(scanf("%s%s",s1,s2)!=EOF)
{
node vs,vd;
memset(vis,0,sizeof(vis));
vs.x=s1[0]-'a'+1;
vs.y=s1[1]-'0';
vd.x=s2[0]-'a'+1;
vd.y=s2[1]-'0';
vis[vs.x][vs.y]=1;
bfs(vs,vd,s1,s2);
}
return 0;
}