[luoguP1443]马的遍历
首先来看一下题目描述:
题目描述
有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步
输入输出格式
输入格式:
一行四个数据,棋盘的大小和马的坐标
输出格式:
一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)
输入输出样例
3 3 1 1
0 3 2 3 -1 1 2 1 4 好了很明显了这是一道搜索题。那么再来分析一下:是应该用深搜还是用广搜呢?那么再来回头看一下题目:要求输出最少的步数。这时我们就应该考虑深搜的可行性了:深搜是一次跑到底,不撞南墙不回头,那么只要搜寻到一个结果都会进行跳出,这种答案是随机的,那么在这里我们使用广搜。 首先来讲一下思路:考虑到马走日的行走规律,我们先定下一个dx和dy数组,用来储存方向。
]={,,,-,-,,-,,-};
]={,,,-,-,-,,-,};
然后是常规的一系列操作:定义地图map,进行搜索。
然后就是搜索函数search。函数的参数为x和y和ans,这里我们定义的返回时刻是一个阙值(定值),可以设定在150~200左右,因为到了这个阙值,地图必将遍历完成(由于数据范围大小的原因)。
然后就是搜索了,我们在函数里面定义一个参数ans用来记录最小步数,然后每次把map[x][y]=ans,这里的x,y是表示的当前的位置坐标,然后在不出界,map未走过的情况下,朝8个方向搜索,代码如下了:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
]={,,,-,-,,-,,-};
]={,,,-,-,-,,-,};
int n,m,horsex,horsey;
][];
void search(int x,int y,int ans)
{
)
return ;
map[x][y]=ans;
;i<=;i++)
{
&&y+dy[i]>)
if(x+dx[i]<=n&&y+dy[i]<=m)
||map[x+dx[i]][y+dy[i]]>ans+)
search(x+dx[i],y+dy[i],ans+);
}
}
int main()
{
cin>>n>>m>>horsex>>horsey;
;i<=n;i++)
;j<=m;j++)
map[i][j]=-;
search(horsex,horsey,);
;i<=n;i++)
{
;j<=m;j++)
printf("%-5d",map[i][j]);
printf("\n");
}
;
}
[luoguP1443]马的遍历的更多相关文章
- 马的遍历问题-回溯法应用-ACM
马的遍历问题 在n*m的棋盘中,马只能走“日” 字.马从位置(x,y)处出发,把棋盘的每一格都走一次,且只走一次.找出所有路径. 问题解的搜索空间? 棋盘的规模是n*m,是指行有n条边,列有m条边. ...
- 洛谷 P1443 马的遍历
P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...
- 最少步数&P1443 马的遍历
1330:[例8.3]最少步数 s数组:记录(1,1)到达每一点需要的最少步数 s[1][1]自然为 0,其余初始化为 -1 que数组:que[#][1] 表示(1,1)可到达点的 x 坐标 q ...
- 【bfs】洛谷 P1443 马的遍历
题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...
- 马的遍历 洛谷 p1443
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...
- 洛谷P1443 马的遍历
https://www.luogu.org/problemnew/show/P1443 很经典的搜索题了,蒟蒻用广搜打的 不说了,上代码! #include<bits/stdc++.h> ...
- 【洛谷】P1443 马的遍历
题目:https://www.luogu.org/problemnew/show/P1443 简单的BFS模板题——因为我写出来了. 分析过程: n*m矩阵,用二维数组 数据不大,二维数组稳了 先把二 ...
- 【洛谷P1443 马的遍历】
题目链接(%%%jyy大佬) 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数 ...
- 洛谷 P1443 马的遍历
终于遇到一个简单纯粹一点的bfs了...... 题目链接:https://www.luogu.org/problemnew/show/P1443 题目是求到达一个点的最短步数 也就是说我只要bfs遍历 ...
随机推荐
- cloudemanager安装时出现ProtocolError: <ProtocolError for 127.0.0.1/RPC2: 401 Unauthorized>问题解决方法(图文详解)
不多说,直接上干货! 问题详情 查看日志/var/log/cloudera-scm-agent/,得知 解决办法 $> ps -ef | grep supervisord $> kill ...
- OpenGL Loading
什么是 OpenGL loading? OpenGL是一份API规范,并不是一个库.记住这点非常重要!它意味着每一个API背后的具体实现都依赖于你的GPU硬件.操作系统以及显卡驱动. OpenGL规范 ...
- [Scala] Pattern Matching(模式匹配)
Scala中的match, 比起以往使用的switch-case有著更強大的功能, 1. 傳統方法 def toYesOrNo(choice: Int): String = choice match ...
- MongoDB的MapReduce用法及php示例代码
MongoDB虽然不像我们常用的mysql,sqlserver,oracle等关系型数据库有group by函数那样方便分组,但是MongoDB要实现分组也有3个办法: * Mongodb三种分组方式 ...
- 使用python简单创建一个用户和商城小程序
整体思路: 1.用户功能:购买.显示余额.列表清单.输入 2.商家功能:修改和添加商品 创建两个接口: 用户: #Author: Gordon #读取文档,生成goodsf = open('goods ...
- intellij idea里神坑的@autowire
当你写完项目的时侯serviceimpl层下的@autowire->对应的是dao层的注入,其下面会出现一条红线 在Intellij Idea开发工具在@Autowired或者@Resource ...
- Web前端面试指导(八):iframe有那些缺点
本题的特点 这道题目的特点就是不按照正常的套路来提问,一般都是问优点,这里比较反常问iframe的缺点,很多同学肯定很不习惯这种问答,因为平时只关注有点,这么一问就懵逼了! 本题解答的思路及要点 ① ...
- 对json缓存进行操作
var data={ id:1, name:"张三" } //存储缓存 var arrdata=[]; arrdata.push({id:data.id,name:data.nam ...
- 关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
问题来源如下: 打开/etc/crontab文件,命令如下: yule@yule-ubuntu:~$ vi /etc/crontab 显示如下内容: # /etc/crontab: system-w ...
- SharePoint中遇到Timeout
使用SharePoint时会遇到不止一种的timeout(即超时)错误. 如果遇到了timeout, 该怎么区分呢? 大致上SharePoint可以控制和影响的timeout地方如下: 1. Shar ...