UVA439 Knight Moves
题目大意
有一个骑士,他可以骑马日字型跳跃,问他从A点到B点最少要几步
解题思路
这题就是一个特别裸的广搜板子
它的主要问题在于输入输出
输入的数据我们可以用\(pair\)读入,第一关键字存行(a~e),第二关键字存列(1 ~ 8)
然后我们为了方便处理,把行也映射成数组1 ~ 8
所以有了我们的读入代码
预编译指令
#define x first
#define y second
定义的\(A, B\)
pair<char, int> A, B;
while (cin >> A.x >> A.y >> B.x >> B.y)
{
int sx = A.x - 'a' + 1, sy = A.y,
fx = B.x - 'a' + 1, fy = B.y;
//printf这句是输出
然后就是巨坑无比的输出了
一定要有句号!!!!!!!!!
代码
#include <iostream>
#include <cstring>
#include <queue>
#define x first
#define y second
using namespace std;
struct Point
{
int x, y, dist;
Point(int a = 0, int b = 0, int c = 0) : x(a), y(b), dist(c) {}
} ;
pair<char, int> A, B;
int mp[9][9];
int bfs(int& sx, int& sy, int& fx, int& fy)
{
if (sx == fx && sy == fy) return 0;
queue<Point> q;
int dx[8] = {-2, -1, 1, 2, 2, 1, -1, -2};
int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};
q.push(Point(sx, sy, 0));
while (q.size())
{
Point t = q.front(); q.pop();
for (int i = 0; i < 8; i ++ )
{
int x = t.x + dx[i], y = t.y + dy[i];
if (x < 1 || x > 8 || y < 1 || y > 8) continue ;
if (mp[x][y]) continue ;
Point now = Point(x, y, t.dist + 1);
if (now.x == fx && now.y == fy) return now.dist;
q.push(now);
}
}
}
int main()
{
while (cin >> A.x >> A.y >> B.x >> B.y)
{
int sx = A.x - 'a' + 1, sy = A.y,
fx = B.x - 'a' + 1, fy = B.y;
printf("To get from %c%d to %c%d takes %d knight moves.\n",
A.x, A.y, B.x, B.y, bfs(sx, sy, fx, fy));
}
return 0;
}
Accepted!
UVA439 Knight Moves的更多相关文章
- uva439 - Knight Moves(BFS求最短路)
题意:8*8国际象棋棋盘,求马从起点到终点的最少步数. 编写时犯的错误:1.结构体内没构造.2.bfs函数里返回条件误写成起点.3.主函数里取行标时未注意书中的图. #include<iostr ...
- UVA 439 Knight Moves
// 题意:输入标准国际象棋棋盘上的两个格子,求马最少需要多少步从起点跳到终点 BFS求最短路: bfs并维护距离状态cnt, vis记录是否访问过 #include<cstdio> ...
- 【习题 6-4 UVA-439】Knight Moves
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] bfs模板题 [代码] /* 1.Shoud it use long long ? 2.Have you ever test sev ...
- UVA439 骑士的移动 Knight Moves
#include<bits/stdc++.h> using namespace std; char a,c; int b,d; ][]; ]={,,,-,,-,-,-}; ]={,-,,, ...
- UVA-439, Knight Moves(深度优先搜索)
#include<iostream> #include<queue> #include<cstring> #include<string> #inclu ...
- 题解 UVA439 骑士的移动 Knight Moves
前言 最近板子题刷多了-- 题意 一个 \(8\times 8\) 的棋盘,问马从起点到终点的最短步数为多少. \(\sf Solution\) 要求最短路径嘛,显然 bfs 更优. 读入 这个读入处 ...
- Knight Moves
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- HDU 1372 Knight Moves
最近在学习广搜 这道题同样是一道简单广搜题=0= 题意:(百度复制粘贴0.0) 题意:给出骑士的骑士位置和目标位置,计算骑士要走多少步 思路:首先要做这道题必须要理解国际象棋中骑士的走法,国际象棋中 ...
- [宽度优先搜索] HDU 1372 Knight Moves
Knight Moves Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- HDU 1372 Knight Moves (bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...
随机推荐
- day09-2视图和用户权限
视图和用户权限 1.视图(view) 看一个需求 emp表的列信息很多,有些信息是个人重要信息(比如:sal.comm.mgr.hiredate),如果我们希望某个用户只能查询emp表的empno.e ...
- Vue实现长按图片识别图中二维码
Vue实现长按图片识别图中二维码 思路:要想实现可以识别图片中的二维码,那必定是要将这张图进行上传操作,上传则需要file对象格式.不管是在H5还是APP中,展示的图片都是通过url的方式展示在img ...
- Pep9课下作业
(1)编写一个伪代码算法 Set sum to 0 Input num1 Read num1 Set sum to sum + num1 Input num2 Read num2 Set sum to ...
- Invalid bound statement (not found)出现原因和解决方法
Invalid bound statement (not found)出现原因和解决方法 前言: 想必各位小伙伴在码路上经常会碰到奇奇怪怪的事情,比如出现Invalid bound statement ...
- Dapr v1.9.0 版本已发布
Dapr是一套开源.可移植的事件驱动型运行时,允许开发人员轻松立足云端与边缘位置运行弹性.微服务.无状态以及有状态等应用程序类型.Dapr能够确保开发人员专注于编写业务逻辑,而不必分神于解决分布式系统 ...
- 获取cpu的核数
//获取cpu的核数 System.out.println(Runtime.getRuntime().availableProcessors());
- Doris开发手记4:倍速性能提升,向量化导入的性能调优实践
最近居家中,对自己之前做的一些工作进行总结.正好有Doris社区的小伙伴吐槽向量化的导入性能表现并不是很理想,就借这个机会对之前开发的向量化导入的工作进行了性能调优,取得了不错的优化效果.借用本篇手记 ...
- 齐博x1如何取消某个标签的缓存时间
标签默认会有缓存, 如果你要强制取消缓存时间的话, 可以加上下面的参数 time="-1"如下图所示 标签默认缓存时间是10分钟, 你也可以改成其它时间 比如 time=" ...
- 2.-url和视图函数
一.URL-结构 1.定义:统一资源定位符 Uniform Resource Locator 2.作用:用来表示互联网上某个资源地址 3.URL的一般语法格式为(注:[]代码其中的内容可以省略): 格 ...
- maven 重复依赖不同版本 选择规则
maven 重复依赖不同版本 选择规则 本篇主要来看看 maven 对于 重复依赖的jar的不同版本时候 它内部的选择规则, 很多时候我们在搭建环境的时候 不注意就会存在依赖冲突等问题 那依赖冲突的时 ...