hdu1372 广搜大水
来源:互联网 发布:软件测试招聘 编辑:程序博客网 时间:2024/04/26 08:29
#include<cstdio>#include<iostream>#include<stdlib.h>#include<ctype.h>#include<algorithm>#include<cmath>#include<cstring>#include<queue>using namespace std;int a,b;char s1,s2;int step[20][120];queue<pair<int,int> > q;int dir[8][2]={-2,-1,-1,-2,2,-1,1,-2,1,2,2,1,-1,2,-2,1};int visit[20][20];void bfs(int m,int n){ visit[m][n]=1; pair<int,int> tmp; while(!q.empty()) q.pop(); q.push(make_pair(m,n)); while(!q.empty()){ tmp=q.front(); q.pop(); if(tmp.first==s2-'a'&&tmp.second==b-1){ //cout<<s1<<a<<s2<<b<<endl; printf("To get from %c%d to %c%d takes %d knight moves.\n",s1,a,s2,b,step[tmp.first][tmp.second]); return; } for(int k=0;k<8;k++){ int ii=tmp.first+dir[k][0]; int jj=tmp.second+dir[k][1]; if(ii>=0&&jj>=0&&ii<8&&jj<8&&!visit[ii][jj]){ visit[ii][jj]=1; step[ii][jj]=step[tmp.first][tmp.second]+1; q.push(make_pair(ii,jj)); } } }}int main(){ while(scanf("%c%d %c%d",&s1,&a,&s2,&b)!=EOF){ //cout<<s1<<a<<s2<<b<<endl; memset(visit,0,sizeof(visit)); memset(step,0,sizeof(step)); bfs(s1-'a',a-1); }}