题目描述

有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步

输入输出格式

输入格式:

一行四个数据,棋盘的大小和马的坐标

输出格式:

一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)

输入输出样例

输入样例#1:

3 3 1 1
输出样例#1:

0    3    2
3 -1 1
2 1 4

一道比较明显的广度优先搜索题,可以发现,起始点值为0,当马第一次跳到哪个点时就是哪个点应该标记的值,并且后续跳到同一个点后会重复循环,一定不是最优解,所以只需保留每个点的第一次遍历到的状态即可,如果发现当前遍历到的点已经被遍历过了,就跳过此点,继续扩展,知道没有可以扩展的点,即所有可能的点都已被遍历过,而遍历不到的点只需在开始时将矩阵初始化为-1就可以保证正确了。

但是题中还有一个条件,就是输出“左对齐,宽5格”,两个条件都可以用printf搞定,只需在“%”与“d”间加上“-5”即可,“-”代表左对齐,“5”代表输出宽5格,还有一个小技巧就是可以再“5”前加“0”,这样可以补足5位前导0,但是注意与“-”左对齐共同使用并无卵用

上代码:

 #include<cstdio>
#include<iostream>
using namespace std;
int n,m,sy,sx,head,tail,ty,tx;
int map[][];
struct que{
int y,x,step;
}q[];
int main(){
scanf("%d%d%d%d",&n,&m,&sy,&sx);
for(int i=;i<=n;i++){//先初始化为-1
for(int j=;j<=m;j++){
map[i][j]=-;
}
}
head=tail=;
map[sy][sx]=;
q[tail].y=sy;
q[tail].x=sx;
q[tail++].step=;
while(head<tail){
ty=q[head].y;
tx=q[head].x;
if(map[ty-][tx+]==-){//向马能跳到的八个方向遍历
//-1判断是否仍未遍历过,保证是第一次遍历
q[tail].y=ty-;
q[tail].x=tx+;
q[tail].step=q[head].step+;
map[ty-][tx+]=q[tail].step;
tail++;
}
if(map[ty-][tx+]==-){
q[tail].y=ty-;
q[tail].x=tx+;
q[tail].step=q[head].step+;
map[ty-][tx+]=q[tail].step;
tail++;
}
if(map[ty+][tx+]==-){
q[tail].y=ty+;
q[tail].x=tx+;
q[tail].step=q[head].step+;
map[ty+][tx+]=q[tail].step;
tail++;
}
if(map[ty+][tx+]==-){
q[tail].y=ty+;
q[tail].x=tx+;
q[tail].step=q[head].step+;
map[ty+][tx+]=q[tail].step;
tail++;
}
if(map[ty+][tx-]==-){
q[tail].y=ty+;
q[tail].x=tx-;
q[tail].step=q[head].step+;
map[ty+][tx-]=q[tail].step;
tail++;
}
if(map[ty+][tx-]==-){
q[tail].y=ty+;
q[tail].x=tx-;
q[tail].step=q[head].step+;
map[ty+][tx-]=q[tail].step;
tail++;
}
if(map[ty-][tx-]==-){
q[tail].y=ty-;
q[tail].x=tx-;
q[tail].step=q[head].step+;
map[ty-][tx-]=q[tail].step;
tail++;
}
if(map[ty-][tx-]==-){
q[tail].y=ty-;
q[tail].x=tx-;
q[tail].step=q[head].step+;
map[ty-][tx-]=q[tail].step;
tail++;
}
head++;
}
for(int i=;i<=n;i++,puts("")){
for(int j=;j<=m;j++){
printf("%-5d",map[i][j]);//左对齐 宽5格
}
}
return ;
}

马的遍历 洛谷 p1443的更多相关文章

  1. 【bfs】洛谷 P1443 马的遍历

    题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...

  2. 洛谷 P1443 马的遍历

    P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...

  3. 洛谷P1443 马的遍历

    https://www.luogu.org/problemnew/show/P1443 很经典的搜索题了,蒟蒻用广搜打的 不说了,上代码! #include<bits/stdc++.h> ...

  4. 洛谷 P1443 马的遍历

    终于遇到一个简单纯粹一点的bfs了...... 题目链接:https://www.luogu.org/problemnew/show/P1443 题目是求到达一个点的最短步数 也就是说我只要bfs遍历 ...

  5. 洛谷 P1443 马的遍历题解

    题目链接:https://www.luogu.org/problem/P1443 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个 ...

  6. 【洛谷P1443 马的遍历】

    题目链接(%%%jyy大佬) 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数 ...

  7. 洛谷P1443马的遍历

    传送 这是个广搜,思路和普通的迷宫题差不多,但我卡了3遍,为什么呢? 因为输出格式 题目要求左对齐,宽度为5输出,在此说一下如何控制宽度. 下面的m都为要求的宽度 int 类型: printf: %m ...

  8. 洛谷P1443 马的遍历(bfs,注意输出格式)

    题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...

  9. 洛谷P1443 马的遍历【BFS】

    题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...

随机推荐

  1. keyStore很重要,千万不能丢失

    打包apk的时候需要对apk文件进行签名,如果想要自己给apk签名那么就要自己创建keystore.1.签名的意义为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package N ...

  2. JavaScript面向对象轻松入门之多态(demo by ES5、ES6、TypeScript)

    多态(Polymorphism)按字面的意思就是"多种状态",同样的行为(方法)在不同对象上有不同的状态. 在OOP中很多地方都要用到多态的特性,比如同样是点击鼠标右键,点击快捷方 ...

  3. ng-cordova(插件库)

    ng-cordova 环境配置 1.执行以下命令 bower install ngCordova 2.引用文件(在引用cordova.js之前引用) <script src="lib/ ...

  4. 为实施了IFD的Dynamics 365更换自签名的SSL证书以符合Chrome的要求

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复259或者20170704可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  5. 自定义VS程序异常处理及调试Dump文件(一)

    自定义VS程序异常处理及调试Dump文件(一) 1. Dump文件 1. Dump文件介绍 Dump文件(Dump File),也叫转储文件,以.DMP为文件后缀.dump文件是进程在内存中的镜像文件 ...

  6. Spring+SpringMVC+MyBatis深入学习及搭建(十三)——SpringMVC入门程序(二)

    1.非注解的处理器映射器和适配器 1.1非注解的处理器映射器 前面我们配置的org.springframework.web.servlet.handler.BeanNameUrlHandlerMapp ...

  7. java用户界面——加载图片 jpg GIF

    java用户界面--加载图片 jpg GIF 代码如下: package day08; import java.awt.GridLayout; import javax.swing.Icon;impo ...

  8. Win7 JBOSS的下载安装、环境变量配置以及部署

    1. 下载安装 http://jbossas.jboss.org/downloads/ 我下载的是:JBoss AS7.1.1.Final 2. 解压安装包  D:\Java\jboss-as-7.1 ...

  9. MongoDB的Windows安装

    一.下载MongoDB安装文件 下载地址:http://pan.baidu.com/s/1nvEuDD3 二.双击下载的文件,根据向导一直到finish.比如安装目录为 d:\mongodb 1.创建 ...

  10. 通过添加filter过滤器 彻底解决ajax 跨域问题

    1.在web.xml添加filter <filter> <filter-name>contextfilter</filter-name> <filter-cl ...