Shortest path of the king
来源:互联网 发布:解除绑定mac地址 编辑:程序博客网 时间:2024/05/19 20:01
一个棋盘,用字母和数字表示横轴和竖轴,可以向八个方向移动,求最短路并写出路径。
最简单的想法就是模拟,首先最短路大小可以判断,就是横向和纵向的最大值,然后根据大小先斜着走,然后在上下左右走。
#include<cstdio>#include<cstring>#include<iostream>using namespace std;int max(int a, int b){return a > b ? a : b;}int min(int a, int b){return a < b ? a : b;}int main(){int i, j, m, n, ans, pre1, pre2, temp1, temp2, temp;char a[2], b[2];scanf("%s", a);scanf("%s", b);pre1 = b[0] - a[0];pre2 = b[1] - a[1];temp1 = max(pre1, -pre1); temp2 = max(pre2, -pre2);ans = max(temp1, temp2);if (pre1 > 0 && pre2 > 0){cout << ans << endl;temp = min(temp1, temp2);for (i = 1; i <= temp; i++)cout << "RU" << endl;if (temp1>temp2)for (i = temp + 1; i <= temp1; i++)cout << "R" << endl;elsefor (i = temp + 1; i <= temp2; i++)cout << "U" << endl;}else if (pre1 > 0 && pre2 < 0){cout << ans << endl;temp = min(temp1, temp2);for (i = 1; i <= temp; i++)cout << "RD" << endl;if (temp1>temp2)for (i = temp + 1; i <= temp1; i++)cout << "R" << endl;elsefor (i = temp + 1; i <= temp2; i++)cout << "D" << endl;}else if (pre1 < 0 && pre2 < 0){cout << ans << endl;temp = min(temp1, temp2);for (i = 1; i <= temp; i++)cout << "LD" << endl;if (temp1>temp2)for (i = temp + 1; i <= temp1; i++)cout << "L" << endl;elsefor (i = temp + 1; i <= temp2; i++)cout << "D" << endl;}else if (pre1<0 && pre2>0){cout << ans << endl;temp = min(temp1, temp2);for (i = 1; i <= temp; i++)cout << "LU" << endl;if (temp1>temp2)for (i = temp + 1; i <= temp1; i++)cout << "L" << endl;elsefor (i = temp + 1; i <= temp2; i++)cout << "U" << endl;}if (pre1 == 0){cout << ans << endl;if (pre2>0)for (i = 1; i <= temp2; i++)cout << "U" << endl;elsefor (i = 1; i <= temp2; i++)cout << "D" << endl;}else if (pre2 == 0&&pre1!=0){cout << ans << endl;if (pre1>0)for (i = 1; i <= temp1; i++)cout << "R" << endl;elsefor (i = 1; i <= temp1; i++)cout << "L" << endl;}return 0;}
但是这个方法太麻烦了,写了很多行,并不是题目的最优解。看了一下源代码,发现可以模拟这个人走的坐标,即每次移动改变字符串。 代码简单易懂,值得思考。
#include<cstring>#include<string>#include<iostream>#include<cstdio>using namespace std;int max(int a, int b){return a > b ? a : b;}int main(){string a, b;int i, j, m, n, ans, pre1, pre2;cin >> a >> b;pre1 = max(a[0] - b[0], b[0] - a[0]);pre2 = max(a[1] - b[1], b[1] - a[1]);ans = max(pre1, pre2);cout << ans << endl;while (a != b){if (a[0] < b[0]){cout << "R";a[0]++;}if (a[0]>b[0]){cout << "L";a[0]--;}if (a[1] < b[1]){cout << "U";a[1]++;}if (a[1]>b[1]){cout << "D";a[1]--;}cout << endl;}return 0;}
0 0
- Shortest path of the king
- Shortest path of the king
- A - Shortest path of the king
- A. Shortest path of the king
- A. Shortest path of the king
- CF3A. Shortest path of the king
- 3A - Shortest path of the king
- Shortest path of the king(贪心)
- CF 3A Shortest path of the king
- Shortest path of the king(比赛2.A)
- coderforce 3A-Shortest path of the king
- codeforces 3A - Shortest path of the king
- Codeforces 3A Shortest path of the king BFS
- code forces 3A Shortest path of the king
- codeforces 3A Shortest path of the king
- 【pair_简单贪心】#3 A. Shortest path of the king
- Codeforces 3A Shortest Path of the King
- Codeforces Round #3A. Shortest path of the king
- 关于Qt在子线程中使用QMessageBox的折衷方法
- OpenGL_ES-纹理
- Java初级笔记_3
- Ubuntu下安装fcitx和sublime中文输入法
- 无聊改装充电宝赠品,废的还是废,成不了宝!
- Shortest path of the king
- 第7章 第3题
- C++学习笔记之 引用
- CAN基础一
- 【iOS】一不小心破解了别人的静态库
- 自定义AlertDialog(二)
- 对C++中3种顺序容器的特性的认识
- 同一项目中的广播(音乐播放进度的UI跟新)
- Linux帐号管理与ACL权限