http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1101

题目描述

小明很喜欢下国际象棋,一天,他拿着国际象棋中的“马”时突然想到一个问题:
给定两个棋盘上的方格a和b,马从a跳到b最少需要多少步?
现请你编程解决这个问题。

提示:国际象棋棋盘为8格*8格,马的走子规则为,每步棋先横走或直走一格,然后再往外斜走一格。

输入格式

输入包含多组测试数据。每组输入由两个方格组成,每个方格包含一个小写字母(a~h),表示棋盘的列号,和一个整数(1~8),表示棋盘的行号。

输出

对于每组输入,输出一行“To get from xx to yy takes n knight moves.”。

样例输入

e2 e4
a1 b2
b2 c3
a1 h8
a1 h7
h8 a1
b1 c3
f6 f6

样例输出

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.

思路:

简单的BFS,只要弄清楚马的走法就可以了,一开始字符数组开小了,蛋疼,以后果断要大方点啊

#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;
struct node
{
int x,y,step;
};
int vis[8][8];
int sx,sy,ex,ey,ans;
int to[8][2]={-1,-2,-2,-1,-2,1,-1,2,1,2,2,1,2,-1,1,-2};
int check(int x,int y)
{
if(x<0 || y<0 || x>=8 || y>=8)
return 1;
if(vis[x][y])
return 1;
return 0;
}
void bfs()
{
int i;
queue<node> Q;
node a,next;
a.x = sx;
a.y = sy;
a.step = 0;
vis[sx][sy] = 1;
Q.push(a);
while(!Q.empty())
{
a = Q.front();
Q.pop();
if(a.x == ex && a.y == ey)
{
ans = a.step;
return ;
}
for(i = 0;i<8;i++)
{
next = a;
next.x+=to[i][0];
next.y+=to[i][1];
if(check(next.x,next.y))
continue;
next.step = a.step+1;
vis[next.x][next.y] = 1;
Q.push(next);
}
}
return ;
}
int main()
{
char ch1[10],ch2[10];
while(~scanf("%s%s",ch1,ch2))
{
sx = ch1[0]-'a';
sy = ch1[1]-'1';
ex = ch2[0]-'a';
ey = ch2[1]-'1';
memset(vis,0,sizeof(vis));
bfs();
printf("To get from %s to %s takes %d knight moves.\n",ch1,ch2,ans);
}
return 0;
}

HNCU1101:马的移动(BFS)相关推荐

  1. HNCU1101:马的移动---BFS

    题目描述 小明很喜欢下国际象棋,一天,他拿着国际象棋中的"马"时突然想到一个问题: 给定两个棋盘上的方格a和b,马从a跳到b最少需要多少步? 现请你编程解决这个问题. 提示:国际象 ...

  2. POJ 1915 经典马步 双向bfs

    拿这个经典题目开刀...........可是双向时间优势在这题上的效果不太明显 #include <iostream> #include <algorithm> #includ ...

  3. OI每周刷题记录——lrllrl

    看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...

  4. 【洛谷】马的遍历--广度优先搜索(BFS)

    题目描述 传送门:https://www.luogu.com.cn/problem/P1443 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意 ...

  5. 广度优先搜索(BFS)——马的遍历(洛谷 P1443)

    来看一道经典的搜索问题--马的遍历 大致题目,给定棋盘规模,以及马的初始位置,输出马到棋盘的最短距离,若不能到达则输出-1 很简单的一个搜索问题,用经典算法BFS就可以了,唯一需要注意判断的就是马有8 ...

  6. 【日常水题-bfs】马的遍历

    这几天日常一搜索qaq P1443 马的遍历 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 ...

  7. 洛谷 P1443 马的遍历(BFS)

    P1443 马的遍历 题目链接:https://www.luogu.org/problemnew/show/P1443 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一 ...

  8. 【BFS】马的覆盖点

    Description 中国象棋是起源于中国的一种棋戏,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味性强,成为流行极为广泛的棋艺活动. 这一天小信迷上了中国象棋,在和一个大师的巅 ...

  9. 马的遍历(BFS)-洛谷

    洛谷-马的遍历 来源:https://www.luogu.com.cn/problem/P1443 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马 ...

最新文章

  1. linux windows 编译安装,Windows下编译安装OpenEXR(x86版本)
  2. ESP32-C3的性价比到底有多高!乐鑫的布局到底是什么呢?
  3. python语言编程中的保留字_Python语言程序设计整理
  4. 致年轻开发人员的一封信
  5. 【深度学习】mask_rcnn训练自己的数据集以及模型使用(实践结合GitHub项目)
  6. 传递函数_使用python计算麦克风阵列信号的传递函数
  7. listView基本实现
  8. python win32转pdf 横版_python实现word转pdf
  9. JMeter使用CSV Data参数化,中文参数传递过程出现乱码问题解决
  10. 【语音分析】基于matlab倒谱分析与MFCC系数计算【含Matlab源码 556期】
  11. C#即时通讯客户端源码【源码免费分享】
  12. 网络安全术语基础知识
  13. 半导体物理学——(三)半导体中载流子的统计分布
  14. 第5章-着色基础-5.4-锯齿和抗锯齿
  15. 如何使用python下载B站视频
  16. java的关键业绩指标_SpreadJS前端开发案例:如何利用Javasrcipt创建财务关键业绩指标表...
  17. Allegro如何录制SCR快捷键操作指导
  18. SCI、EI、IEEE和中文期刊在查询中有什么区别?
  19. VB中的IIF() 函数
  20. (完结项目)fpga采集双路CCD摄像头1000帧图像上传到上位机显示

热门文章

  1. 如何画出广义表的存储结构
  2. Java 英文句子去掉多余的空格
  3. JAVA计算机毕业设计星光在线光影系统计算机(附源码、数据库)
  4. AI人工智能领域精美绘图模板分享
  5. Android手机拍照后存储高清原图
  6. python3[爬虫实战] 爬虫之requests爬取新浪微博京东客服
  7. Unity-地形编辑器-编辑器拓展功能类
  8. iOS 开发 带区号的城市三级联动(xml解析)
  9. catia二次开发:函数是否需要加括号 ,type类型 ,出现未定义变量类型错误,怎么破, 背景色设置 ,检查模块是否封闭 ,几何图形集是否存在某一个元素
  10. UG/NX二次开发Siemens官方NXOPEN实例解析—2.7 DiameterSymbol(标注符号)