HDU 1372 Knight Moves
最近在学习广搜 这道题同样是一道简单广搜题=0=
题意:(百度复制粘贴0.0)
题意:给出骑士的骑士位置和目标位置,计算骑士要走多少步
思路:首先要做这道题必须要理解国际象棋中骑士的走法,国际象棋中,骑士是在一个3*2的格子中进行对角线移动,通过画图很容易就知道骑士最多可以朝八个方向移动,那么就朝8个方向进行BFS即可
//细节注意:
1.输入开始结束坐标时需要保存 所以我用了全局变量 因为输出还需要他们=0=;
2.依旧是用bool类型进行map保存,防止内存超限, 0表示还未走过, 1表示走过此点;
3.结束标志 找到e_x, e_y 此点;
4.BFS开始之前直接把开始坐标s_x, s_y转化好, 开始点从a-h表示X下标0-7, 1-8表示y下标0-7;
代码奉上:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define N 60
using namespace std;
int dir[8][2] = {1,2, 2,1, -1,2, 2,-1, 1,-2, -2,1, -1,-2, -2,-1};
bool maps[10][10];
char ch1, ch2;//输入时时字符 分表表示s_x e_x
int s_x, s_y, e_x, e_y;//开始坐标与结束坐标
typedef struct xy
{
int x, y, step;
} zb;//step保存从开始到此坐标需走步数
zb s, e;
void BFS()
{
int x, y;
zb v;
queue<zb>q;
q.push(s);
while(!q.empty())
{
int i;
s = q.front();
if(s.x == e.x && s.y == e.y)
{
printf("To get from %c%d to %c%d takes %d knight moves.\n", ch1, s_y + 1, ch2, e_y + 1, s.step);
return;//输出时记得y下标比给的值大一 更正回来
}
q.pop();
for(i = 0; i < 8; i++)
{
x = s.x + dir[i][0];
y = s.y + dir[i][1];
if(x >= 0 && x < 8 && y >= 0 && y < 8 && maps[x][y] == 0)
{
maps[x][y] = 1;//走过标记
v = {x, y, s.step + 1};//步数别忘记加1
q.push(v);
}
}
}
}
int main()
{
while(~scanf(" %c%d %c%d", &ch1, &s_y, &ch2, &e_y))
{
memset(maps, 0, sizeof(maps));
s_x = ch1 - 'a';
s_y--;//给的Y比下标大1
e_x = ch2 - 'a';
e_y--;
s = {s_x, s_y, 0};
e = {e_x, e_y};
maps[s.x][s.y] = 1;//开始点记得标记已走过
BFS();
}
}
HDU 1372 Knight Moves的更多相关文章
- HDU 1372 Knight Moves(最简单也是最经典的bfs)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...
- HDU 1372 Knight Moves(bfs)
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 这是一道很典型的bfs,跟马走日字一个道理,然后用dir数组确定骑士可以走的几个方向, ...
- [宽度优先搜索] 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 ...
- HDU 1372 Knight Moves【BFS】
题意:给出8*8的棋盘,给出起点和终点,问最少走几步到达终点. 因为骑士的走法和马的走法是一样的,走日字形(四个象限的横竖的日字形) 另外字母转换成坐标的时候仔细一点(因为这个WA了两次---@_@) ...
- ZOJ 1091 (HDU 1372) Knight Moves(BFS)
Knight Moves Time Limit: 2 Seconds Memory Limit: 65536 KB A friend of you is doing research on ...
- HDOJ/HDU 1372 Knight Moves(经典BFS)
Problem Description A friend of you is doing research on the Traveling Knight Problem (TKP) where yo ...
- (step4.2.1) hdu 1372(Knight Moves——BFS)
解题思路:BFS 1)马的跳跃方向 在国际象棋的棋盘上,一匹马共有8个可能的跳跃方向,如图1所示,按顺时针分别记为1~8,设置一组坐标增量来描述这8个方向: 2)基本过程 设当前点(i,j),方向k, ...
- HDU 1372 Knight Moves(BFS)
题目链接 Problem Description A friend of you is doing research on the Traveling Knight Problem (TKP) whe ...
随机推荐
- C语言 在VS环境下一个很有意思的报错:stack around the variable was corrupted
今天做一个很简单的oj来温习下c 语言 题目如下 输入 3位正整数 输出 逆置后的正整数 代码如下: #include"stdio.h"int main(){ float h,su ...
- Qt之界面实现技巧
一.主界面 1.窗口 最小化 最小化 关闭按钮 显示状态自定义 setWindowFlags(Qt::CustomireWindowHint); setWindowFlags(Qt::WindowCl ...
- MSDeploy
http://blogs.iis.net/jamescoo/default.aspx Web Deployment Tool Now Works With Credential Store Feb ...
- LNK1169: one or more multiply defined symbols found
The build failed due to multiple definitions of one or more symbols. This error is preceded by error ...
- url结构说明
就以下面这个URL为例,介绍下普通URL的各部分组成 http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&pa ...
- Prince2是怎么考试的?
Prince2是怎么考试的? 在前几年,对于项目经理来讲关注的很多是单项目管理的工具技术模板,谈论最多的是,进度延期,成本超支,范围蔓延等等!有一个不成文的形态就是--去考个PMP吧!一时间PMP成为 ...
- [充电]C++ string字符串替换
//C++ 第一种替换字符串的方法用replace()|C++ 第二种替换字符串的方法用erase()和insert()[ C++string|C++ replace()|C++ erase()|C+ ...
- js页面刷新之实现框架内外刷新(整体、局部)
这次总结的是框架刷新: 框架内外的按钮均可以定义网页重定向, 框架内部页面的按钮可以实现局部刷新, 框架外部页面的按钮可以实现整页刷新. 代码如下(两个html页面): <!--主界面index ...
- python学习笔记十三 JS,Dom(进阶篇)
JS介绍 JavaScript 是属于网络的脚本语言!JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用:JavaScript 是因特网上最流 ...
- shell & dialog
最近使用dialog写图形自动化shell脚本, 功能很强大,功能不是非常多但是足够用.想写一篇linux下dialog的使用方法,虽然命令不多,但是写起来也需要下很大功夫,而且不一定写得更好,在网 ...