POJ 2243 Knight Moves(BFS)
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.
InputThe 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.
OutputFor 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.
分析:简单的BFS求最短路,需要注意的是国际象棋中骑士和中国象棋中的马一样走日字
代码:
#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
const int N = ;
typedef struct {
int x;
int y;
} P;
int dx[] = {-, , -, , -, , -, };
int dy[] = {-, -, -, -, , , , };
int vis[N][N];
int d[N][N];
char s[];
char e[];
int sx, sy, ex, ey;
int check(int x, int y) {
return x >= && x < && y >= && y < ;
}
void bfs() {
queue<P> que;
P p;
p.x = sx;
p.y = sy;
que.push(p);
vis[sx][sy] = ;
while(que.size()) {
P p = que.front();
que.pop();
int x = p.x;
int y = p.y;
if(x == ex && y == ey) {
printf("To get from %s to %s takes %d knight moves.\n", s, e, d[x][y]);
break;
}
for(int i = ; i < ; i++) {
int nx = x + dx[i], ny = y + dy[i];
if(check(nx, ny) && !vis[nx][ny]) {
vis[nx][ny] = ;
d[nx][ny] = d[x][y] + ;
P p;
p.x = nx;
p.y = ny;
que.push(p);
}
}
}
}
int main() {
while(cin >> s >> e) {
for(int i = ; i < N; i++) {
for(int j = ; j < N; j++) d[i][j] = vis[i][j] = ;
}
sx = s[] - '' - ;
sy = s[] - 'a';
ex = e[] - '' - ;
ey = e[] - 'a';
bfs();
}
return ;
}
POJ 2243 Knight Moves(BFS)的更多相关文章
- POJ 2243 Knight Moves
Knight Moves Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13222 Accepted: 7418 Des ...
- POJ 1915 Knight Moves(BFS+STL)
Knight Moves Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 20913 Accepted: 9702 ...
- POJ 1915 Knight Moves
POJ 1915 Knight Moves Knight Moves Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 29 ...
- OpenJudge/Poj 1915 Knight Moves
1.链接地址: http://bailian.openjudge.cn/practice/1915 http://poj.org/problem?id=1915 2.题目: 总Time Limit: ...
- (step4.2.1) hdu 1372(Knight Moves——BFS)
解题思路:BFS 1)马的跳跃方向 在国际象棋的棋盘上,一匹马共有8个可能的跳跃方向,如图1所示,按顺时针分别记为1~8,设置一组坐标增量来描述这8个方向: 2)基本过程 设当前点(i,j),方向k, ...
- UVA 439 Knight Moves(BFS)
Knight Moves option=com_onlinejudge&Itemid=8&category=11&page=show_problem&problem=3 ...
- HDU 1372 Knight Moves(BFS)
题目链接 Problem Description A friend of you is doing research on the Traveling Knight Problem (TKP) whe ...
- HDU1372:Knight Moves(BFS)
Knight Moves Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total ...
- hdu1372 Knight Moves BFS 搜索
简单BFS题目 主要是读懂题意 和中国的象棋中马的走法一样,走日字型,共八个方向 我最初wa在初始化上了....以后多注意... 代码: #include <iostream> #incl ...
随机推荐
- 详细解说Tomcat 设置虚拟路径的几种方法及为什么设置虚拟路径
说明:此次使用的是Tomcat 7.0 很多朋友都会很疑惑,既然我们都知道在Tomcat服务器上部署项目只要将项目打包,然后放到webapps目录下就可以了,为什么还需要配置虚拟路径?的确,把项目放到 ...
- swt-designer安装教程
http://jingyan.baidu.com/article/3f16e003c87b082590c10343.html
- R语言多层绘图
#########################################################第一种实现方法close.screen(all.screens = T)split.s ...
- mysql 安装成功以及第一次安装成功初始化密码操作
一 把文件解压到一个目录下 这是解压后的目录 将my.ini文件考进去 双击打开my.ini 找到这两行更改成自己的解压路径保存 右键此电脑属性 找到高级系统设置配置环境变量 环境变量 新建 变量 ...
- LRU缓存机制
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果密钥 (key) 存 ...
- vue 定义全局变量在一个组件内引用
第一步: 第二步: 第三步: ok!!完了,当然了,你也可以在 main.js里面全局引用,然后用原型链挂在vue上面,用this的方法去获取!!
- Spring Boot入门第四天:使用Thymeleaf模板引擎
原文链接 关于Thymeleaf的优点,我只说一条:它就是html页面啊,直接可以用浏览器打开.受够了JSP的同学可以尝试一下. 1.在pom.xml文件中添加依赖: <!--<depen ...
- Ubuntu 16.04下docker ce的安装(待完善)
参见:https://www.cnblogs.com/senlinyang/p/8203191.html https://blog.csdn.net/qq_34906391/article/detai ...
- Python自学:第二章 使用制表符或换行符来添加空白
print("Languages:\n\tPython\n\tC\n\tJava") 输出为: Languages: Python C Java
- IntelliJ IDEA的这些配置,你值得拥有
一.自动编译开关 二.忽略大小写开关 IDEA默认是匹配大小写,此开关如果未关.你输入字符一定要符合大小写.比如你敲string是不会出现代码提示或智能补充.但是,如果你开了这个开关,你无论输入Str ...