前言

最近板子题刷多了……

题意

一个 \(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. 图解OSI七层模型

    七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系.它是一个七层的.抽象的模型体 ...

  2. centos 安装ftp服务BUG

    安装完成之后匿名可登录,但是先创建的用户名和密码无法登录,最后排查原因是/etc/pam.d/vsftpd 文件注释掉第四行 auth required pam_shells.so

  3. 【Java】idea同时运行多个一样的类

    点击"Edit Configurations..." 在左侧选中需要重复运行的类 单击"Modify options" 选择"Allow multip ...

  4. 部署k8s的heapster监控

    Heapster是容器集群监控和性能分析工具,天然的支持Kubernetes和CoreOS heapster监控目前官网已经不更新,部署学习使用 heapster: 收集监控数据 influxdb:数 ...

  5. Spring(四)-声明式事务

    Spring-04 声明式事务 1.事务的定义 事务就是由一组逻辑上紧密关联的多个工作单元(数据库操作)而合并成一个整体,这些操作要么都执行,要么都不执行. 2.事务的特性:ACID 1)原子性A : ...

  6. SpringMVC 06: 日期类型的变量的注入和显示

    日期处理和日期显示 日期处理 此时SpringMVC的项目配置和SpringMVC博客集中(指SpringMVC 02)配置相同 日期处理分为单个日期处理和类中全局日期处理 单个日期处理: 使用@Da ...

  7. class 中的 构造方法、static代码块、私有/公有/静态/实例属性、继承 ( extends、constructor、super()、static、super.prop、#prop、get、set )

     part 1         /**          * << class 中的 static 代码块与 super.prop 的使用          *          * - ...

  8. C# 常见面试问题

    C# 常见面试问题 EntityFramework 数据持久化 C#中的委托是什么?事件是不是一种委托? C#中的委托是一种引用类型,表示具有相同方法签名的方法的引用.类似于函数指针,也就是说它们是指 ...

  9. Kibana探索数据(Discover)详解

    设置时间过滤器 时间过滤器按照指定的时间段展示搜索结果.设置了 index contains time-based events 和 time-field 的索引模式可以使用时间过滤器. 时间过滤器默 ...

  10. logstash 读取MySQL数据到elasticsearch 相差8小时解决办法

    logstash和elasticsearch是按照UTC时间的,kibana却是按照正常你所在的时区显示的,是因为kibana中可以配置时区信息. 具体看这个: logstash 的配置文件添加 fi ...