hdu Knight Moves

来源:互联网 发布:python 反转二叉树 编辑:程序博客网 时间:2024/05/16 01:22

这题真是醉了。一直不知道题目在描述什么,后来问了一个朋友才知道,题目是这样的:一个国际象棋骑士(走法和中国象棋的马一样),最短多少步能跳到目标位置。

分析:直接广搜,把位置转化为数字,然后传入bfs函数里面。

代码如下

#include <iostream>#include <cstring>#include <string>#include <queue>using namespace std;int visit[10][10],ans;struct node{int x;int y;};void bfs(int sx,int sy,int ex,int ey){node d,D;queue<node>q;while(!q.empty())q.pop();d.x=sx,d.y=sy;q.push(d);int move[8][2]={-2,1, -2,-1, 2,-1, 2,1, 1,2, -1,2, -1,-2, 1,-2 };while(!q.empty()){d=q.front();q.pop();if(d.x==ex && d.y==ey){ans=visit[d.x][d.y];return ;}for(int i=0;i<8;i++){D.x=d.x+move[i][0];D.y=d.y+move[i][1];if(!visit[D.x][D.y] && D.x>=1 && D.y>=1 && D.x<=8 && D.y<=8){visit[D.x][D.y]=visit[d.x][d.y]+1;q.push(D);}}}}int main(){string s1,s2;while(cin>>s1>>s2){memset(visit,0,sizeof(visit));ans=0;int sx,sy,ex,ey;sx=s1[1]-'0';ex=s2[1]-'0';sy=s1[0]-'a'+1;ey=s2[0]-'a'+1;bfs(sx,sy,ex,ey);cout<<"To get from "<<s1<<" to "<<s2<<" takes "<<ans<<" knight moves."<<endl;}}

0 0
原创粉丝点击