题目:

在象棋王国,尼古拉斯.火山是一匹英俊的马,他非常幸运迎娶了白马王国的公主,他们将度蜜月,你现在是他们的女仆,火山会问你去一些地方最少需要多少步,这么简单的事当然难不倒你。由于火山是一匹马,他的移动方式将会遵守国际象棋马的走法。
输入:
输入包含一个或多个输入样例。每个测试样例将会有两个坐标,表示现在的位置和将要到达的地方,每个坐标包含一个字母(a-h)表示列和一个数字(1-8) 行,这意味这这个象棋王国是一个8* 8的矩形。
Input
输入包含一个或多个输入样例。每个测试样例将会有两个坐标,表示现在的位置和将要到达的地方,每个坐标包含一个字母(a-h)表示列和一个数字(1-8) 行,这意味这这个象棋王国是一个8* 8的矩形。
Output
每一组样例将会输出一段话 “To get from xx to yy takes n knight moves.”,其中xx表示起点,yy表示终点,n为xx到yy的最短步数。
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.

分析与解答

基础bfs,主要是知道那个马是怎么走的,就是每次是需要怎么走,然后列和行转换成数字就行

#include<stdio.h>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int step;
int dir[8][2]={{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}};
int map[10][10],ex,ey;
char s1[5],s2[5];
struct node
{  int x,y,step;
};  int bfs()
{  int i;  memset(map,0,sizeof(map));  //标记数组 node st,ed;  //队首 st.x = s1[0]-'a';  st.y = s1[1]-'1';  st.step = 0;  ex = s2[0]-'a' ; //终点坐标 ey = s2[1]-'1';  queue<node> q;map[st.x][st.y] = 1;  q.push(st);  while(!q.empty())  {  st = q.front();  q.pop();  if(st.x == ex && st.y == ey)//队首元素等于终点的话直接返回 {return st.step;  }     for(i = 0; i<8; i++)  //变换八个位置 {  ed.x = st.x+dir[i][0];  ed.y = st.y+dir[i][1];       if (ed.x>=0&&ed.x<8&&ed.y>=0&&ed.y<8&&map[ed.x][ed.y]==0) //没走过而且在棋盘内 {  ed.step=st.step+1;  map[ed.x][ed.y]=1;  q.push(ed);  }  }  }  return 0;
}  int main()
{  while(~scanf("%s%s",s1,s2))  //s1跑到s2 {  printf("To get from %s to %s takes %d knight moves.\n",s1,s2,bfs());  }  return 0;
}

(BFS)Knight Moves(hdu1372)相关推荐

  1. Knight Moves(信息学奥赛一本通-T1450)

    [题目描述] 编写一个程序,计算一个骑士从棋盘上的一个格子到另一个格子所需的最小步数.骑士一步可以移动到的位置由下图给出. [输入] 第一行给出骑士的数量 n. 在接下来的 3n 行中,每 3 行描述 ...

  2. 广搜(BFS)和深搜(DFS)

    广搜(BFS)和深搜(DFS) 文章目录 广搜(BFS)和深搜(DFS) 一.广搜(BFS) 二.深搜(DFS) 一.广搜(BFS) #include <bits/stdc++.h> us ...

  3. POJ 2243:Knight Moves(双向BFS)

    http://poj.org/problem?id=2243 问题概述:一个8*8的棋盘,给定一个起点(列a-h,行1-8)和一个终点(列a-h,行1-8),按骑士的走法(走日字),从起点到 终点最少 ...

  4. 信息学奥赛一本通(1257:Knight Moves)

    1257:Knight Moves 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 6149     通过数: 3100 [题目描述] 输入nn代表有个n×n的棋盘 ...

  5. LeetCode 773. 滑动谜题(BFS 地图状态转换的最短距离)

    1. 题目 在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示. 一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换. 最终当板 b ...

  6. 【PTA】龙舌兰酒吧 (BFS求双源最短路)

    目录 1.题目描述 2.输入输出 3.解题思路 4.样例解析 5.代码实现 1.题目描述 有一个大小为n*m的矩形小镇,城镇上有房屋("#"表示无法通过),有空地(".& ...

  7. WUST 2090 HLD与停车场(bfs||dfs||暴力模拟||巧妙思维)

    2090: HLD与停车场 Time Limit: 1 Sec   Memory Limit: 128 MB   64bit IO Format: %lld Submitted: 21   Accep ...

  8. Knight Moves(信息学奥赛一本通-T1257)

    [题目描述] 输入n代表有个n×n的棋盘,输入开始位置的坐标和结束位置的坐标,问一个骑士朝棋盘的八个方向走马字步,从开始坐标到结束坐标可以经过多少步. [输入] 首先输入一个n,表示测试样例的个数. ...

  9. 【POJ - 3026】Borg Maze(bfs预处理 + 最小生成树,建图)

    题干: The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the gala ...

最新文章

  1. SAP HU上面的'Obj.to Which HU Belongs'栏位初探
  2. findHomography(src_points, dst_points, CV_RANSAC)
  3. Java高并发编程(六):重入锁
  4. SIGIR 2021 | 推荐系统中的多行为建模
  5. POJ 3259 Wormholes
  6. 快来加入阿里云大学【云学院】班级助理招募—机会稍纵即逝,错过遥遥无期!...
  7. CentOS安装yum 镜像 举例阿里云镜像
  8. jeesite使用心得(二)
  9. EhCache 常用配置项详解
  10. python实现单链表快速排序升序linkedqueue_LeetCode 总结 - 搞定 Linked List 面试题
  11. Java 设计模式之原型模式
  12. oracle sql列默认值,sql – Oracle:指定对象类型列的默认值
  13. 新冠疫情相似句对判定,快速匹配准确答案
  14. R语言学习笔记(1)
  15. 机器学习- 吴恩达Andrew Ng Week6 知识总结 Machine Learning System Design
  16. 关于网站速度优化的一点建议
  17. python colorbar刻度_python-如何添加Matplotlib Colorbar刻度
  18. CSGO开启跑图设置一看就会
  19. 热风枪焊接表面贴装元件的工具和技巧
  20. vue使用luckySheet前端excel的在线表格,导入显示以及导出excel文件

热门文章

  1. Oracle创建视图、通过视图创建表
  2. Android studio小问题解决
  3. 数据结构pta选择判断复习
  4. Intellij idea 出现错误 error:java: 无效的源发行版: 11解决方法
  5. linux ubuntu 编写c/c++ 获取命令行传入参数示例
  6. Spring整合JDBC开发
  7. linux每隔多久调度y,Linux 进程调度+Linux系统一般执行过程 笔记
  8. win10安装misql8_Windows10安装MySQL 8.0.11
  9. 制作 mysql的rpm文件_自制mysql.rpm安装包
  10. SpringCloud 超详细个人笔记