HDU 1372Knight Moves

给你两个点 问 骑士这个玩意走几步能到 注意是走“日”字!走“日”字!走“日”字!重要的事情说三遍!

题目不给看

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char aa[4],bb[4];
int sx,sy,ex,ey,ans;
int dir[8][2]={1,-2,1,2,2,1,2,-1,-1,2,-1,-2,-2,1,-2,-1};
bool vis[10][10];
int qx[10000],qy[10000];
struct node
{
     int x,y,z,step;
}a[1000000];
int bfs(int x,int y)
{
     int l=0,r=1;
     a[0].x=x,a[0].y=y;
     a[0].step=0;
     vis[x][y]=1;
     while(l<r)
     {
          node cur=a[l++],next;
          //printf("%d %d %d %d %c\n",cur.step,cur.x,cur.y,cur.z,map[cur.x][cur.y][cur.z]);
          for(int i=0;i<8;i++)
          {
               next.x=cur.x+dir[i][0];
               next.y=cur.y+dir[i][1];
               next.step=cur.step+1;
               if(next.x>0&&next.x<=8&&next.y>0&&next.y<=8&&!vis[next.x][next.y])
               {
                    if(next.x==ex&&next.y==ey) return next.step;
                    vis[next.x][next.y]=1;
                    a[r++]=next;
               }
          }
         // printf("%d %d %d %d %c\n",next.step,next.x,next.y,next.z,map[next.x][next.y][next.z]);

     }
     return 0;
}
int main()
{
    //freopen("cin.txt","r",stdin);
    while(cin>>aa>>bb)
    {
         memset(vis,0,sizeof(vis));
         sx=aa[0]-96,ex=bb[0]-96;
         sy=aa[1]-48,ey=bb[1]-48;
         ans=0;

         //printf("%d %d %d %d\n",sx,sy,ex,ey);
         ans=bfs(sx,sy);
         cout<<"To get from "<<aa<<" to "<<bb<<" takes "<<ans<<" knight moves."<<endl;
         //cout<<ans<<endl;
    }
    return 0;
}


你可能感兴趣的:(HDU,广搜)