洛谷P1443 马的遍历
https://www.luogu.org/problemnew/show/P1443
很经典的搜索题了,蒟蒻用广搜打的
不说了,上代码!
#include<bits/stdc++.h>
using namespace std;
struct xy {//定义结构体
int x,y;//x,y两个方向
} node,Top;
int dx[]={,-,,-,-,,-,};
int dy[]={,,-,-,,,-,-};//马走的八个方向
int a[][];
bool b[][];
int n,m;
void bfs(int x,int y,int step) {//广搜函数
a[x][y]=step;
b[x][y]=false;
queue<xy>q;//建立一个队列
node.x=x;
node.y=y;
q.push(node);//入队
while (!q.empty()){//如果队列不为空就循环
Top=q.front();//取队首元素
q.pop();//出队
for (int i=;i<;i++){
int newx=Top.x+dx[i];
int newy=Top.y+dy[i];//往八个方向遍历
if (newx<||newx>n||newy<||newy>m) continue;//判断是否越界
if (b[newx][newy]){//如果该点没有标记过
node.x=newx;
node.y=newy;//更新
q.push(node);//入队
b[newx][newy]=false;//标记
a[newx][newy]=a[Top.x][Top.y]+;//步数+1
}
}
}
}
int main() {
memset(b,true,sizeof(b));
memset(a,-,sizeof(a));//数组初始化
int x,y;
cin>>n>>m>>x>>y;//输入
bfs(x,y,);//广搜
for (int i=; i<=n; i++) {
for (int j=; j<=m; j++)
printf("%-5d", a[i][j]);//输出五位常宽
cout<<endl;//换行
}
return ;
}
洛谷P1443 马的遍历的更多相关文章
- 【bfs】洛谷 P1443 马的遍历
题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...
- 洛谷 P1443 马的遍历
P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...
- 洛谷 P1443 马的遍历
终于遇到一个简单纯粹一点的bfs了...... 题目链接:https://www.luogu.org/problemnew/show/P1443 题目是求到达一个点的最短步数 也就是说我只要bfs遍历 ...
- 洛谷 P1443 马的遍历题解
题目链接:https://www.luogu.org/problem/P1443 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个 ...
- 【洛谷P1443 马的遍历】
题目链接(%%%jyy大佬) 题目描述 有一个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),在某个点上有一个马,要求你计算出马到达 ...
随机推荐
- C++读取与保持图片
#include<iostream> using namespace std; void main(void) { //保存输入图像文件名和输出图像文件名 ]; ]; //图像数据长度 i ...
- []、()、None的区别
def product(*numbers): if numbers == (): raise TypeError for x in numbers: if not isinstance (x, (in ...
- 【练习】Python第三次
对函数,内置函数的用法,递归,程序运行顺序的考试 1.列举布尔值为 False 的值 0 False '' [] () {} None 经常使用的场景是 if object 如果object有值就执行 ...
- Robot Return to Origin
There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequence of its mov ...
- HBase Master HA高可用
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行. 所以这里要配置HBase高可用的话,只需要 ...
- PowerScript语句
赋值语句 赋值语句可以把一个表达式的结果或者变量和常量的值,赋给一个变量或者对象的属性或成员变量.赋值语句的格式是: variablename = expression 其中variablename代 ...
- MTD的认识
MTD即内存计数设备,是linux中对ROM.NORFLASH.NAND Flash等存储设备抽象出来的一个设备层,它向上提供统一的访问接口:读写.擦除等:屏蔽了底层硬件的操作.各类存储设备的差别. ...
- usb设备驱动的分析
怎样来分析驱动程序呢? 1.将一个usb设备插入到电脑上,在串口软件上能够显示一些打印信息,用source insight软件打开linux内核2.6.22版本,然后从第一行查找通用的关键字,找到这一 ...
- java基础 ---- 一维数组
为什么要使用数组: 因为不使用数组计算多个变量的时候太繁琐,不利于数据的处理. -------- 数组也是一个变量,是存储一组相同类型的变量 声明一个变量就是在内存中划出一块合适的空间 声明一个数 ...
- OO_多线程电梯_单元总结
概述: 面向对象的第二单元是多线程电梯.第一次实现一部傻瓜电梯,每次只送一个人:第二次实现一部可稍带电梯:第三次实现三部可稍带电梯. 一.设计策略 1.第5.6次作业设计思路 第5.6次作业的架构相似 ...