【洛谷P1443 马的遍历】
题目链接(%%%jyy大佬)
题目描述
有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步
输入输出格式
输入格式:
一行四个数据,棋盘的大小和马的坐标
输出格式:
一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)
输入输出样例
3 3 1 1
0 3 2
3 -1 1
2 1 4 主要是BFS的思想(毕竟是BFS经典题QwQ)
我们直接通过注释来理解叭
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node//我们不妨先设一个结构体
{
int x,y,step;//设坐标以及步数
node(int x,int y,int step):x(x),y(y),step(step){};//构造函数,可以进行赋值操作
};
queue<node> q;
int sx,sy;//当前的步数
int mx[]={,-,-,,,,,-,-};//横坐标的移动
int my[]={,-,-,-,-,,,,};//纵坐标的移动
int st[][];//该点走到需要花费的步数
bool check(int x,int y)//判断是否出界
{
return ((<=x&&x<=n)&&(<=y&&y<=m));
}
bool used[][];
void bfs()//笨法师
{
used[sx][sy]=;//标记已经走过
q.push(node(sx,sy,));//入队
st[sx][sy]=;//初始化
while(!q.empty())//队列非空 (直至非空)
{
node u=q.front();//取队首
q.pop();//出队
for(int i=;i<=;i++)//各种情况进行遍历
{
int nx=u.x+mx[i];//下一步 (横坐标)
int ny=u.y+my[i];//下一步 (纵坐标)
if(check(nx,ny)&&!used[nx][ny])//判断这个点是否在界内并且是否被走过
{
used[nx][ny]=;//标记走过
st[nx][ny]=u.step+;//step(步数)+1
q.push(node(nx,ny,u.step+));//继续入队
}
}
}
}
int main()
{
scanf("%d%d%d%d",&n,&m,&sx,&sy);//日常输入
bfs();//进行广搜操作
for(int i=;i<=n;i++)//print操作
{
for(int j=;j<=m;j++)
{
if(!used[i][j])
printf("%-5d",-);//控制位数,输出无解
else
printf("%-5d",st[i][j]);//控制位数
}
puts("");//换行
}
return ;
}
【洛谷P1443 马的遍历】的更多相关文章
- 【bfs】洛谷 P1443 马的遍历
题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...
- 洛谷 P1443 马的遍历
P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...
- 洛谷P1443 马的遍历
https://www.luogu.org/problemnew/show/P1443 很经典的搜索题了,蒟蒻用广搜打的 不说了,上代码! #include<bits/stdc++.h> ...
- 洛谷 P1443 马的遍历
终于遇到一个简单纯粹一点的bfs了...... 题目链接:https://www.luogu.org/problemnew/show/P1443 题目是求到达一个点的最短步数 也就是说我只要bfs遍历 ...
- 洛谷 P1443 马的遍历题解
题目链接:https://www.luogu.org/problem/P1443 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个 ...
- 洛谷P1443马的遍历
传送 这是个广搜,思路和普通的迷宫题差不多,但我卡了3遍,为什么呢? 因为输出格式 题目要求左对齐,宽度为5输出,在此说一下如何控制宽度. 下面的m都为要求的宽度 int 类型: printf: %m ...
- 洛谷P1443 马的遍历(bfs,注意输出格式)
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...
- 洛谷P1443 马的遍历【BFS】
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...
- 洛谷——P1443 马的遍历
https://www.luogu.org/problem/show?pid=1443#sub 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达 ...
随机推荐
- qt undefined reference to `vtable for subClass'
1. 建立一个console工程 QT -= gui CONFIG += c++ console CONFIG -= app_bundle # The following define makes y ...
- 【JZOJ 3918】蛋糕
题面: 正文: 根据数据\(4\leq R,C\leq 75\)我们大概可以先枚举切横的刀再二分答案. 更具体的: 假设我们已经枚举到这样横切: 再假设我们已经二分到最小的巧克力是\(7\) 康康第一 ...
- 工作笔记之20170223:①关于Html5的placeholder属性,②以及input的outline:none的样式问题
关于这边几个样式问题,重点有这么几个: (1)placeholder="请输入密码" (2) color:#BEB6B6; border:0px; border-bottom:1p ...
- Java的同名属性、同名普通函数、同名静态函数,是否被覆盖
作者按:虚拟函数的概念早就滚瓜烂熟了.但是今天面试发现:1.同名属性,2.同名普通函数,3.同名静态函数,是否被覆盖的问题.请看下面三个例子: 例子1:测试父类的属性是否存在和被完全覆盖class A ...
- jquery data的用法
jquery data和 jquery attr, js getAttribute 有着本质的区别,并且无法用$(el).data('property')的方法,去获取$(el).attr('data ...
- 锋利的jQuery ——jQuery中的事件和动画(四)
一.jQuery中的事件 1)加载DOM $(document).ready()和window.onload的区别 1>执行时机 $(document).ready(){} 方法内注册的事件, ...
- AFNetworking2.0源码解析<四>
结构 AFURLResponseSerialization负责解析网络返回数据,检查数据是否合法,把NSData数据转成相应的对象,内置的转换器有json,xml,plist,image,用户可以很方 ...
- fpga ip
原文地址:altera FIR ip核 license破解作者:王永刚Aether 在证书文件中添加一段: FEATURE 6AF7_0012 alterad 2035.12 permanent un ...
- fpga错误总结
Error (10200): Verilog HDL Conditional Statement error at ps2_con_cmd.v(11): cannot match operand(s) ...
- java ThreadGroup源码分析
使用: import javax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction; public class Test { public s ...