【NEEPU OJ】3004--马走日
2019-03-09 19:29
190 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34072526/article/details/88370213
描述
在象棋王国,尼古拉斯.火山是一匹英俊的马,他非常幸运迎娶了白马王国的公主,他们将度蜜月,你现在是他们的女仆,火山会问你去一些地方最少需要多少步,这么简单的事当然难不倒你。由于火山是一匹马,他的移动方式将会遵守国际象棋马的走法。
输入
输入包含一个或多个输入样例。每个测试样例将会有两个坐标,表示现在的位置和将要到达的地方,每个坐标包含一个字母(a-h)表示列和一个数字(1-8) 行,这意味这这个象棋王国是一个8*8的矩形。
输出
每一组样例将会输出一段话 “To get from xx to yy takes n knight moves.”,其中xx表示起点,yy表示终点,n为xx到yy的最短步数。
输入样例 1
e2 e4
a1 b2
b2 c3
a1 h8
a1 h7
h8 a1
b1 c3
f6 f6
输出样例 1
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.
代码
#include <cstdio> #include <cstring> #include <queue> using namespace std; const int dx[] = {-2, 2, -2, 2, 1, 1, -1, -1}; const int dy[] = {1, 1, -1, -1, -2, 2, -2, 2}; int vis[10][10]; struct node{ int x, y; }start, over; int bfs(){ if(start.y == over.y && start.x == over.x) return 0; memset(vis, 0, sizeof(vis)); queue<node> q; int i; q.push(start); while(!q.empty()){ node t1 = q.front(); q.pop(); for(i = 0; i < 8; i++){ node t2; t2.x = t1.x + dx[i]; t2.y = t1.y + dy[i]; if(t2.x >= 1 && t2.x <= 8 && t2.y >= 1 && t2.y <= 8 && !vis[t2.y][t2.x]){ vis[t2.y][t2.x] = vis[t1.y][t1.x] + 1; if(t2.y == over.y && t2.x == over.x) return vis[t2.y][t2.x]; q.push(t2); } } } return -1; } int main(){ char sy, oy; while(~scanf("%c%d %c%d%*c", &sy, &start.x, &oy, &over.x)){ start.y = sy - 96; over.y = oy - 96; printf("To get from %c%d to %c%d takes %d knight moves.\n", sy, start.x, oy, over.x, bfs()); } return 0; }
相关文章推荐
- △【OJ】---S---复数类,重载运算符+,-,*,/
- 九度OJ 1074:对称平方数 (数字特性)
- ZZULI-oj 1157 985的数字难题 (数学小规律)
- [C/C++]OJ练习题: 压缩字符串&还原压缩字符串 [栈训练]
- △【OJ】(二)---J---剪刀石头布
- 【OJ】QUST 1400
- 【华为 OJ】 名字的漂亮度
- #算法之路之征服上海交大的oj-高精度加法
- OJ 2J
- 九度OJ 1092:Fibonacci (递归)
- OJ---数组计算公式java
- 校oj193——连续出现的字符
- LeetCode OJ - Regular Expression Matching
- 九度OJ 1102:最小面积子矩阵 (DP、缓存、剪枝)
- 【华为 OJ 】百钱买百鸡
- 2017-12-09 杭电OJ2001《计算两点间的距离》
- OJ
- 九度OJ 1114:神奇的口袋 (DFS、DP)
- FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-PU
- NEUQACM OJ 1015:同因查找