Knight Moves

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 10542    Accepted Submission(s): 6211

Problem Description

A friend of you is doing
research on the Traveling Knight Problem (TKP) where you are to find the
shortest closed tour of knight moves that visits each square of a given set of
n squares on a chessboard exactly once. He thinks that the most difficult part
of the problem is determining the smallest number of knight moves between two given
squares and that, once you have accomplished this, finding the tour would be
easy.
Of course you know that it is vice versa. So you offer him to write a program
that solves the "difficult" part.

Your job is to write a program that takes two squares a and b as input and then
determines the number of knight moves on a shortest route from a to b.

Input

The input file will contain
one or more test cases. Each test case consists of one line containing two
squares separated by one space. A square is a string consisting of a letter
(a-h) representing the column and a digit (1-8) representing the row on the
chessboard.

Output

For each test case, print one
line saying "To get from xx to yy takes n knight moves.".

Sample Input

e2 e4

a1 b2

b2 c3

a1 h8

a1 h7

h8 a1

b1 c3

f6 f6

Sample Output

To get from e2 to e4 takes 2
knight moves.

To get from a1 to b2 takes 4
knight moves.

To get from b2 to c3 takes 2
knight moves.

To get from a1 to h8 takes 6
knight moves.

To get from a1 to h7 takes 5
knight moves.

To get from h8 to a1 takes 6
knight moves.

To get from b1 to c3 takes 1
knight moves.

To get from f6 to f6 takes 0
knight moves.

Source

University of
Ulm Local Contest 1996

原文大意:对一个国际象棋的棋盘,每次输入骑士(骑士=马)的起始位置和目标位置,问至少要多少步才能走到。

解题思路:其实是一个裸的广搜,贴上充数用的,输入输出打麻烦了。

#include<stdio.h>

#include<string.h>

#include<queue>

using namespace std;

struct mp

  {

       int x,y,step;

       mp(int x,int y,int step):x(x),y(y),step(step){}

  };

queue<mp> q;

void bfs(int xbegin,int ybegin,int xend,int yend)

  {

       const int move[2][8]={{1,2,2,1,-1,-2,-2,-1},{2,1,-1,-2,-2,-1,1,2}};

       int i,x,y,visit[9][9];

       char sans1,sans2;

       memset(visit,0,sizeof(visit));

       if(xbegin==xend&&ybegin==yend)

         {

             sans1=xbegin+'a'-1;

             sans2=xend+'a'-1;

             printf("To get from %c%d to %c%d takes %d knight moves.\n",sans1,ybegin,sans2,yend,0);

             return;

          }

       while(!q.empty()) q.pop();

       q.push(mp(xbegin,ybegin,0));

       visit[xbegin][ybegin]=1;

       while(!q.empty())

         {

             for(i=0;i<8;++i)

               {

                x=q.front().x+move[0][i];y=q.front().y+move[1][i];

                if(x==xend&&y==yend)

                   {

                     sans1=xbegin+'a'-1;

                     sans2=xend+'a'-1;

                     printf("To get from %c%d to %c%d takes %d knight moves.\n",sans1,ybegin,sans2,yend,q.front().step+1);

                     return;

                   }

                if(x>0&&x<9&&y>0&&y<9&&(!visit[x][y]))

                 {

                             q.push(mp(x,y,q.front().step+1));

                             visit[x][y]=1;

                       }

                     }

             q.pop();

          }

       return;

  }

int main()

  {

       char s[5];

        int x_start,x_end,y_start,y_end;

       while(scanf("%s",&s)!=EOF)

         {

             x_start=s[0]-'a'+1;

             y_start=s[1]-'0';

             scanf("%s",s);

             x_end=s[0]-'a'+1;

             y_end=s[1]-'0';

             bfs(x_start,y_start,x_end,y_end);

          }

       return 0;

  }

  

[宽度优先搜索] HDU 1372 Knight Moves的更多相关文章

  1. HDU 1372 Knight Moves(最简单也是最经典的bfs)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...

  2. HDU 1372 Knight Moves(bfs)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 这是一道很典型的bfs,跟马走日字一个道理,然后用dir数组确定骑士可以走的几个方向, ...

  3. HDU 1372 Knight Moves (bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...

  4. ZOJ 1091 (HDU 1372) Knight Moves(BFS)

    Knight Moves Time Limit: 2 Seconds      Memory Limit: 65536 KB A friend of you is doing research on ...

  5. HDU 1372 Knight Moves 题解

    Knight Moves Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  6. HDU 1372 Knight Moves

    最近在学习广搜  这道题同样是一道简单广搜题=0= 题意:(百度复制粘贴0.0) 题意:给出骑士的骑士位置和目标位置,计算骑士要走多少步 思路:首先要做这道题必须要理解国际象棋中骑士的走法,国际象棋中 ...

  7. HDU 1372 Knight Moves【BFS】

    题意:给出8*8的棋盘,给出起点和终点,问最少走几步到达终点. 因为骑士的走法和马的走法是一样的,走日字形(四个象限的横竖的日字形) 另外字母转换成坐标的时候仔细一点(因为这个WA了两次---@_@) ...

  8. HDOJ/HDU 1372 Knight Moves(经典BFS)

    Problem Description A friend of you is doing research on the Traveling Knight Problem (TKP) where yo ...

  9. (step4.2.1) hdu 1372(Knight Moves——BFS)

    解题思路:BFS 1)马的跳跃方向 在国际象棋的棋盘上,一匹马共有8个可能的跳跃方向,如图1所示,按顺时针分别记为1~8,设置一组坐标增量来描述这8个方向: 2)基本过程 设当前点(i,j),方向k, ...

随机推荐

  1. paper 104: 彩色图像高速模糊的懒惰算法

    工程及源代码:快速模糊.rar                            图像模糊算法有很多种,我们最常见的就是均值模糊,即取一定半径内的像素值之平均值作为当前点的新的像素值,在一般的工业 ...

  2. 数据库中 dbo是什么意思

    亲当你在用sql 自动生成查询等sql 语句的时候 还记得 from 后边那一大串嘛 比如 [IWMS].[DBO].[CARTON] 一直我都对这个东西懵懵懂懂的 最近一直在学习存储过程,正好想起来 ...

  3. RCNN 和SPPnet的对比

    一.RCNN: 1.首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口. 2.把这2k个候选窗口的图片都缩放到227*227,然后分别输入CNN中,每个候选窗台提取出一个特征向量,也就是说 ...

  4. 优秀Python学习资源收集汇总(强烈推荐)

    Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...

  5. ipad开发:二维码扫描,摄像头旋转角度问题解决办法

    之前一直是在手机上开发,用系统原生二维码扫描功能,一点问题都没有,但是在ipad上,用户是横屏操作的,虽然界面旋转了,是横屏的,但是摄像头里显示的依然是竖屏效果,也就是说从摄像头里看到的和人眼看到的内 ...

  6. winform 传值,构造函数等

    窗体转换 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form1 f ...

  7. jquery.validate使用 - 2

    jQuery.validate.js API说明 参考http://ideabean.javaeye.comPlugin methods Name Type validate( options ) R ...

  8. jquery之remove(),detach()方法详解

    一:remove()方法 remove()函数用于从文档中移除匹配的元素. 你还可以使用选择器进一步缩小移除的范围,只移除当前匹配元素中符合指定选择器的部分元素. 与detach()相比,remove ...

  9. 13.KVM安装之网桥

    安装必须的几个库和软件(最好下载一个163的yum源,速度快点) $ yum -y install kvm python-virtinst libvirt tunctl bridge-utils vi ...

  10. mmap()与munmap()的小例子

    mmap() 和 munmap() - Unix的系统函数,更贴近底层 void* mmap(void* addr,size_t size,int prot,int flags, int fd, of ...