HDU 1372 Knight Moves

来源:互联网 发布:算法 第四版 pdf 编辑:程序博客网 时间:2024/05/16 05:50


http://acm.hdu.edu.cn/showproblem.php?pid=1372

#include <queue>#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;struct node{    int x,y;    void init(int nx, int ny){        x = nx;        y = ny;    }};char str1[10],str2[10];int dis[10][10],vis[10][10];int x1,y1,x2,y2;int dir[][2] = {{-2,-1},{-1,-2},{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1}};bool Isin(int x, int y){    if(x < 1 || x > 8 || y < 1 || y > 8)    return false;    return true;}int bfs(int x, int y){    queue <node> q;    while(!q.empty())        q.pop();    node a,b;    a.init(x,y);    vis[a.x][a.y] = 1;    q.push(a);    while(!q.empty()){        a = q.front();        q.pop();        if(a.x == x2 && a.y == y2)  return 1;        for(int i=0; i<8; i++){            int xx = a.x + dir[i][0],yy = a.y + dir[i][1];            b.init(xx, yy);            if(!vis[xx][yy] && Isin(xx, yy)){                vis[xx][yy] = 1;                dis[xx][yy] = dis[a.x][a.y] + 1;                q.push(b);            }        }    }    return 0;}int main(){//    freopen("in.txt", "r", stdin);    while(scanf("%s%s", str1, str2) != EOF){        x1 = str1[0] - 'a' + 1, x2 = str2[0] - 'a' + 1;        y1 = str1[1] - '0', y2 = str2[1] - '0';        memset(vis, 0, sizeof(vis));        memset(dis, 0, sizeof(dis));        if(bfs(x1, y1)) printf("To get from %s to %s takes %d knight moves.\n",str1, str2, dis[x2][y2]);    }    return 0;}

0 0