HDU1372----Knight Moves

来源:互联网 发布:c语言中玫瑰花数 编辑:程序博客网 时间:2024/06/06 12:43

bfs水题,以前看错题意等balabala的不做,现在一眼就。。。

还是要多敲代码啊

#include<stdio.h>#include<queue>#include<stack>#include<string.h>using namespace std;int vis[20][20];int dx[8]={1,1,2,2,-1,-1,-2,-2};int dy[8]={2,-2,1,-1,2,-2,1,-1};int sx,sy,ex,ey;struct node{int x,y,t;};char s1[5],s2[5];void bfs(){    queue<node> q;    while(!q.empty()) q.pop();    node t;    t.x=sx,t.y=sy,t.t=0;    q.push(t);    vis[t.x][t.y]=1;    while(!q.empty())    {        node u=q.front();        q.pop();        if(u.x==ex&&u.y==ey){            printf("To get from %s to %s takes %d knight moves.\n",s1,s2,u.t);            break;        }        node v=u;        for(int i=0;i<8;i++){            int x=u.x+dx[i];            int y=u.y+dy[i];            if(x>=0&&x<=7&&y>=1&&y<=8&&!vis[x][y]){                v.x=x;                v.y=y;                v.t=u.t+1;                q.push(v);                vis[x][y]=1;            }        }    }}int main(){    while(scanf("%s%s",s1,s2)!=EOF)    {        sx=s1[0]-97;        sy=s1[1]-48;        ex=s2[0]-97;        ey=s2[1]-48;        memset(vis,0,sizeof vis);        bfs();    }}


0 0