最近在学习广搜  这道题同样是一道简单广搜题=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的更多相关文章

  1. HDU 1372 Knight Moves(最简单也是最经典的bfs)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...

  2. HDU 1372 Knight Moves(bfs)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 这是一道很典型的bfs,跟马走日字一个道理,然后用dir数组确定骑士可以走的几个方向, ...

  3. [宽度优先搜索] HDU 1372 Knight Moves

    Knight Moves Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  4. HDU 1372 Knight Moves (bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...

  5. HDU 1372 Knight Moves【BFS】

    题意:给出8*8的棋盘,给出起点和终点,问最少走几步到达终点. 因为骑士的走法和马的走法是一样的,走日字形(四个象限的横竖的日字形) 另外字母转换成坐标的时候仔细一点(因为这个WA了两次---@_@) ...

  6. 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 ...

  7. HDOJ/HDU 1372 Knight Moves(经典BFS)

    Problem Description A friend of you is doing research on the Traveling Knight Problem (TKP) where yo ...

  8. (step4.2.1) hdu 1372(Knight Moves——BFS)

    解题思路:BFS 1)马的跳跃方向 在国际象棋的棋盘上,一匹马共有8个可能的跳跃方向,如图1所示,按顺时针分别记为1~8,设置一组坐标增量来描述这8个方向: 2)基本过程 设当前点(i,j),方向k, ...

  9. HDU 1372 Knight Moves(BFS)

    题目链接 Problem Description A friend of you is doing research on the Traveling Knight Problem (TKP) whe ...

随机推荐

  1. SignalR实时推送

    SignalR 的实现机制与 .NET WCF 或 Remoting 是相似的,都是使用远程代理来实现.在具体使用上,有两种不同目的的接口:PersistentConnection 和 Hubs,其中 ...

  2. Spring 计划

    3.0----------------------------------------------------- SCRUM 流程的步骤2: Spring 计划 1. 确保product backlo ...

  3. windows系统调用 利用事件对象实现进程通信

    #include "iostream" #include "windows.h" #include "cstring" using name ...

  4. Linux下执行的java命令重定向到文件中的方法

    在Linux下通常会执行如:java -version 的命令, 但是,命令只是打印到了屏幕上不能重定向到文件中或标准输出流中. 此时需要将错误输出流重定向到标准输出流中就可以得到了. 比如:java ...

  5. 更新数据前jquery如何填充数据到表单域中

    $("#p_city option[value='${project.city}']").attr("selected","selected" ...

  6. transition、animation在macbook air上图片动画边缘抖动

    示例: BUG描述: 最近同事一项目中,产品提出在macbook air上,列表图片放大效果边缘出现抖动现象.在retina屏上没有此问题. 调试过程: 1.单独把结构分离.确定是否由其他元素引起. ...

  7. [课程设计]Sprint Two 回顾与总结&发表评论&团队贡献分

    [课程设计]Sprint Two 回顾与总结&发表评论&团队贡献分 ● 一.回顾与总结 (1)回顾 燃尽图: Sprint计划-流程图: milestones完成情况如下: (2)总结 ...

  8. Stockbroker Grapevine(floyd+暴力枚举)

    Stockbroker Grapevine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31264 Accepted: 171 ...

  9. python之redis

    Redis简单介绍 如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构 ...

  10. python异常和错误(syntax errors 和 exceptions)

    语法错误 语法错误又被称解析错误 >>> for i in range(1..10):print(i) File "<stdin>", line 1 ...