zoukankan      html  css  js  c++  java
  • HDU 1372 Knight Moves【BFS】

    题意:给出8*8的棋盘,给出起点和终点,问最少走几步到达终点。

    因为骑士的走法和马的走法是一样的,走日字形(四个象限的横竖的日字形)

    另外字母转换成坐标的时候仔细一点(因为这个WA了两次---@_@)

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring>  
     4 #include<algorithm>  
     5 #include<queue>
     6 #define maxn 105
     7 using namespace std;
     8 struct node
     9 {
    10     int x,y;
    11     int step;    
    12 } now,next,st,en;
    13 queue<node>q;
    14 char m,n;
    15 int vis[maxn][maxn];
    16 int dir[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
    17 void bfs(int x,int y)
    18 {
    19     now.x=x;now.y=y;now.step=0;
    20     while(!q.empty()) q.pop();
    21     q.push(now);
    22     vis[x][y]=1;
    23     while(!q.empty())
    24     {
    25         now=q.front();q.pop();
    26         if(now.x==en.x&&now.y==en.y)
    27         {
    28             printf("To get from %c%d to %c%d takes %d knight moves.
    ",m,st.y,n,en.y,now.step);
    29             return;
    30         };
    31         for(int i=0;i<8;i++)
    32         {
    33             next.x=now.x+dir[i][0];
    34             next.y=now.y+dir[i][1];
    35             if(next.x<1||next.y>8||next.y<1||next.y>8) continue;
    36             if(!vis[next.x][next.y])
    37             {
    38                 vis[next.x][next.y]=1;
    39                 next.step=now.step+1;
    40                 q.push(next);
    41                 if(next.x==en.x&&next.y==en.y)
    42                 {
    43                     printf("To get from %c%d to %c%d takes %d knight moves.
    ",m,st.y,n,en.y,next.step);
    44                     return;                    
    45                 }
    46             }
    47         }
    48     }    
    49 }
    50 int main()
    51 {
    52     while(cin>>m>>st.y>>n>>en.y)
    53     {
    54         memset(vis,0,sizeof(vis));
    55         st.x=m-'a'+1;
    56         en.x=n-'a'+1;
    57         bfs(st.x,st.y);
    58     }
    59 }
    View Code
  • 相关阅读:
    Linux实战(2):Linux传输文件
    Linux实战(1):装机一键设置脚本初级版
    Docker实战(4):Docker错误记一笔
    Docker实战(3):Tomcat部署
    Docker实战(5)升级Docker版本后的报错
    Promise
    创建数据库
    wepy中组件之间通信方法
    javascript —— 禁止通过 Enter 键提交表单
    input禁止复制、粘贴、剪切
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4290025.html
Copyright © 2011-2022 走看看