Uva439——Knight Moves
来源:互联网 发布:js面向对象原型 编辑:程序博客网 时间:2024/06/06 00:23
简单的BFS。只是国际象棋的棋盘有点特殊,坐标需要转换下。
AC代码:
#include <iostream>#include <queue>#include <cstring>using namespace std;struct node{int x, y, count;};int xy[8][2] = {-1, -2, -2, -1, -2, 1, -1, 2, 1, 2, 2, 1, 2, -1, 1, -2};int num[10][10];int ans;int bfs(int x1, int y1, int x2, int y2){int x, y, z;memset(num, 0, sizeof(num));queue<node> Q;node n;n.x = x1;n.y = y1;n.count = 0;num[x1][y1] = 1;Q.push(n);while(!Q.empty()){n = Q.front();Q.pop();x = n.x;y = n.y;z = n.count;if(x == x2 && y == y2)return z;for(int i = 0; i < 8; i++){if(x + xy[i][0] >= 1 && x + xy[i][0] <= 8 && y + xy[i][1] >= 1 && y + xy[i][1] <= 8){if(num[x + xy[i][0]][y + xy[i][1]] == 0){n.x = x + xy[i][0];n.y = y + xy[i][1];n.count = z + 1;num[n.x][n.y] = 1;Q.push(n);}}}}return 0;}int main(){//freopen("1.txt", "r", stdin);char str1[3], str2[3];while(cin >> str1 >> str2){int x1 = str1[0] - 'a' + 1;int y1 = 8 - (str1[1] - '1');int x2 = str2[0] - 'a' + 1;int y2 = 8 - (str2[1] - '1');cout << "To get from " << str1 << " to " << str2 << " takes " << bfs(x1, y1, x2, y2) << " knight moves." << endl;}return 0;}
0 0
- Uva439——Knight Moves
- UVA439- Knight Moves
- Knight Moves UVA439
- uva439 - Knight Moves
- UVA439 - Knight Moves
- UVa439 Knight Moves
- uva439 Knight Moves
- uva439 Knight Moves
- uva439 -- Knight Moves
- uva439 - Knight Moves 国际象棋的跳马
- poj_2243/uva439 Knight Moves(bfs經典)
- UVA439 POJ2243 HDU1372 ZOJ1091 Knight Moves
- UVa439---Knight Moves(BFS应用)
- 【UVA439】 Knight Moves BFS (3/1000)
- POJ1915 Knight Moves BFS (UVA439 与之相似)
- uva439 Knight Moves (搜索 BFS, BFS启蒙题)
- uva439 - Knight Moves(BFS求最短路)
- UVa439 习题 6-4 骑士的移动(Knight Moves)
- 内存管理的基础
- numpy.load
- 算法 - 排序 - 选择排序
- 2016年的C++常见的面试问题详解~搬至牛客网~strcpy
- 10Redis键空间通知(keyspace notifications)
- Uva439——Knight Moves
- OkHttp的使用
- iOS——iOS8 Photo库 PHAsset之坑
- 练习
- JAVA编程指南 --继承
- 经典排序算法——选择排序
- UML中用例图的extend和include
- Eclipse 如何设置注释的模板
- Fastdfs客户端连接超时解决方案