UVA 439-Knight Moves
来源:互联网 发布:有些源码上传会失败 编辑:程序博客网 时间:2024/05/23 23:32
UVA 439-Knight Moves
题目大意:给出国际象棋棋盘俩个坐标,求马从坐标1到坐标2的最短步数
解题思路:bfs寻找最短路
#include <stdio.h>#include <iostream>#include <queue>#include <string.h>using namespace std;struct kni{ int x, y, d;};int dir[8][2] = {{1, 2}, {-1, 2}, {2, 1}, {2, -1}, {-2, 1}, {-2, -1}, {1, -2}, {-1, -2}};queue<kni> que;int map[9][9];int bfs(int a, int b) { while(!que.empty()) { if(que.front().x == a && que.front().y == b) return 0; for(int i = 0; i < 8; i++) { int c = que.front().x + dir[i][0], d = que.front().y + dir[i][1]; if(c > 0 && c <= 8 && d > 0 && d <= 8 && map[c][d] == 0) { if(c == a && d == b) return que.front().d + 1; else { map[que.front().x][que.front().y] = 1; kni kk; kk.x = c; kk.y = d; kk.d = que.front().d+1; que.push(kk); } } } que.pop(); } return -1;}int main() { char ch1, ch2; int x1, x2, y1, y2; while(cin >> ch1 >> y1 >> ch2 >> y2) { while(!que.empty()) que.pop(); memset(map, 0, sizeof(map)); x1 = ch1 - 'a' + 1; x2 = ch2 - 'a' + 1; kni k; k.x = x1; k.y = y1; k.d = 0; que.push(k); int re = bfs(x2, y2); printf("To get from %c%d to %c%d takes %d knight moves.\n", ch1, y1, ch2, y2, re); } return 0;}
0 0
- uva 439 knight moves
- uva 439 - Knight Moves
- uva 439 - Knight Moves
- uva 439 - Knight Moves
- uva 439 - Knight Moves
- uva-439 - Knight Moves
- UVa 439 - Knight Moves
- UVa 439 - Knight Moves
- UVA 439 - Knight Moves
- uva 439 Knight Moves
- UVa 439 - Knight Moves
- uva 439 - Knight Moves
- UVa:439 Knight Moves
- uva 439 - Knight Moves
- uva 439 Knight Moves
- UVa 439 - Knight Moves
- uva 439 - Knight Moves
- UVA 439 - Knight Moves
- 2016.08.11【初中部 NOIP提高组 】模拟赛C
- AFNetWorking的简单封装 图片音频 视频下载 上传 请求数据
- sublime&&Hbuilder扩展常用代码块
- UIWebView携带参数的POST请求
- 51MCU的中断系统
- UVA 439-Knight Moves
- 39. Combination Sum
- OJ------等差数列
- 深度学习算法实践9---用Theano实现多层前馈网络
- 矩阵元素相乘----搜狗2016研发工程师编程题
- 轻量级RPC框架fox(一)
- iOS 最新版 CocoaPods 的安装流程
- android调试中怎样使用gcc提供的工具
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)