前言

最近板子题刷多了……

题意

一个 \(8\times 8\) 的棋盘,问马从起点到终点的最短步数为多少。

\(\sf Solution\)

要求最短路径嘛,显然 bfs 更优。

读入

这个读入处理有点麻烦……

我们可以把表示行的字符转化为数字,即 ch-'a'+1

搜索

将起点入队,每次获取队首元素并相应扩展,记录步数。

搜到的第一条路径就是最短路径,直接输出 step 。

\(\sf Code\)

#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
struct node
{
int x,y,step;
} o;
queue<node>q;
int dx[8]={-1,1,-1,1,-2,2,-2,2},
dy[8]={-2,2,2,-2,-1,1,1,-1};//马的八个方向
bool vis[10][10];//标记数组
int sx,sy,ex,ey,xx,yy;
char ch;
string qx,qy;
int main()
{
while(cin>>qx&&qx[0]!=EOF)
{
cin>>qy;
sx=qx[0]-'a'+1,sy=qx[1]-'0';
ex=qy[0]-'a'+1,ey=qy[1]-'0';//读入
memset(vis,false,sizeof(vis));//初始化
vis[sx][sy]=true;
q.push((node){sx,sy,0});
while(!q.empty())
{
o=q.front(),q.pop();
if(o.x==ex&&o.y==ey)//找到路径
{
cout<<"To get from "<<qx<<" to "<<qy<<" takes "<<o.step<<" knight moves.\n";
break;
}
for(int i=0;i<8;++i)//扩展
{
xx=o.x+dx[i],yy=o.y+dy[i];
if(xx<=0||yy<=0||xx>8||yy>8)
continue;
if(vis[xx][yy])
continue;//不符合要求的情况都排除
vis[xx][yy]=true,q.push((node){xx,yy,o.step+1});
}
}
while(!q.empty())
q.pop();//别忘记清空队列
}
return 0;
}

题解 UVA439 骑士的移动 Knight Moves的更多相关文章

  1. UVA439 骑士的移动 Knight Moves

    #include<bits/stdc++.h> using namespace std; char a,c; int b,d; ][]; ]={,,,-,,-,-,-}; ]={,-,,, ...

  2. 【习题 6-4 UVA-439】Knight Moves

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] bfs模板题 [代码] /* 1.Shoud it use long long ? 2.Have you ever test sev ...

  3. uva439 - Knight Moves(BFS求最短路)

    题意:8*8国际象棋棋盘,求马从起点到终点的最少步数. 编写时犯的错误:1.结构体内没构造.2.bfs函数里返回条件误写成起点.3.主函数里取行标时未注意书中的图. #include<iostr ...

  4. Hdoj 1374.Knight Moves 题解

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

  5. uva 439 Knight Moves 骑士移动

    这道题曾经写过,bfs.用队列,不多说了,上代码: #include<stdio.h> #include<stdlib.h> #include<string.h> ...

  6. HDU 1372 Knight Moves 题解

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

  7. UVA-439, Knight Moves(深度优先搜索)

    #include<iostream> #include<queue> #include<cstring> #include<string> #inclu ...

  8. HDU1372:Knight Moves(经典BFS题)

    HDU1372:Knight Moves(BFS)   Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %l ...

  9. 1450:【例 3】Knight Moves

    1450:[例 3]Knight Moves  题解 这道题可以用双向宽度搜索优化(总介绍在  BFS ) 给定了起始状态和结束状态,求最少步数,显然是用BFS,为了节省时间,选择双向BFS. 双向B ...

随机推荐

  1. 微信小程序检查版本更新并重启

    目录 1,前言 2,解决方案 3,调试须知 1,前言 最近开发小程序时候碰上了一个问题,当发布新版本小程序后,需要用户能赶紧用上最新的,避免出问题.查了一下官方文档,总结出几个情况如下: 微信运行时, ...

  2. FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务

    FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务 前言 最近的工作中,需要将手机上的文件发送到公司的 FTP 的服务器.按照从前的思路,自然是,先将文件传到电脑,再由电脑上传 ...

  3. 文件分享工具ShareLocalFile不需要云盘的实时上传下载文件的云盘工具可以搜索整个网络的文件

    工具的下载地址:https://comm.zhaimaojun.cn/AllSources/ToolDetail/?tid=9693 这是一个未来的项目,可以分享我们的文件,目前由于个人的技术水平限制 ...

  4. Downie for Mac最强视频下载工具(支持B站优酷土豆腾讯等)

    我搜集到的一款简单拖放链接到Downie,它就会下载该网站上的视频.理论可以下载各种视频网站上的视频! 应用介绍 Downie 是一款Mac平台上的优秀视频下载软件,使用非常简单,只需将下载链接放置D ...

  5. 禁止mysql自动更新

    每到00:00时,MySQL弹出小黑框 这是mysql在自动检测更新 右键"此电脑",点击"管理" 依此操作即可

  6. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(17)-Fiddler如何充当第三者,再识AutoResponder标签-下篇

    1.简介 上一篇宏哥主要讲解的一些在电脑端的操作和应用,今天宏哥讲解和分享一下,在移动端的操作和应用.其实移动端和PC端都是一样的操作,按照宏哥前边抓取移动端包设置好,就可以开始实战了. 2.界面功能 ...

  7. openstack中Neutron组件简解

    一.Neutron概述 Neutron 的设计目标是实现"网络即服务(Networking as a Service)".为了达到这一目标,在设计上遵循了基于 SDN 实现网络虚拟 ...

  8. Kubernetes 存储系统 Storage 介绍:PV,PVC,SC

    要求:先了解数据docker容器中数据卷的挂载等知识 参考网址: https://www.cnblogs.com/sanduzxcvbnm/p/13176938.html https://www.cn ...

  9. Promtail Pipeline 日志处理配置

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492144&idx=1&sn=a1cc13a642 ...

  10. Kubernetes实践技巧:资源预留

    ubernetes 的节点可以按照节点的资源容量进行调度,默认情况下 Pod 能够使用节点全部可用容量.这样就会造成一个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护 ...