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);    }}

原创粉丝点击