牛客 走出迷宫<每日一题分享>(bfs基础题目)

news/2024/6/29 12:00:40 标签: 宽度优先, 算法, 链表

题目链接:登录—专业IT笔试面试备考平台_牛客网

题目

 代码详解:

#include<iostream>
using namespace std;
#include<queue>
#include<string.h>
int m, n, endx, endy;
char map[503][503];//存储迷宫
struct fx
{
	int x;
	int y;
}around[] = { {0,1},{-1,0},{1,0},{0,-1} };
//方向结构体的设计,让小明能往四处走
int main()
{
	while (cin >> n >> m)//当不存在输入的时候停止
	{
		bool flag = 0;//falg作为标记是否能到达终点
		fx now;//定义结构体now标记位置
		memset(map, 0, sizeof map);//每次重新输入地图需要对地图清零并重新填写
		bool vis[503][503] = { 0 };//标记该处是否被走过
		for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= m; j++)
			{
				char s;
				cin >> s;
				map[i][j] = s;
				if (map[i][j] == 'S')//找到起点的位置
				{
					now.x = i;
					now.y = j;
					vis[i][j] = 1;
				}
			}
		}
		queue<fx> p;
		p.push(now);//将一开始的位置放入p中
		while (!p.empty())//当p中没有能继续走的情况退出循环
		{
			now = p.front();
			p.pop();//进行该位置的四处走动,并在p中消除该位置
			for (int i = 0; i < 4; i++)//四处走动
			{
				int nx = now.x + around[i].x;
				int ny = now.y + around[i].y;
				if (map[nx][ny] == 'E')
				{
					flag = 1;
					break;
				}//找到终点,直接输出
				if (vis[nx][ny]) continue;//如果被走过直接继续循环
				if (nx <= n && ny <= m && nx >= 1 && ny >= 1 && map[nx][ny] != '#')//走动到的该位置没有障碍且在地图内
				{
					p.push({ nx,ny });//将能到达的该点放入p中
					vis[nx][ny] = 1;//标记该位置已经被探索
				}
			}
		}
		if (flag)
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}
	return 0;
}

总结:bfs对于细节把握要求能力较强,一个小错误会让你不得不debug很久,所以每一步都需要仔细的斟酌,记住bfs的一般套路

PS:学如逆水行舟,不进则退,坚持会为你的胜利的护航!加油!


http://www.niftyadmin.cn/n/1036940.html

相关文章

复杂XML的解析及组装

在实际的项目中&#xff0c;IPhone应用程序会存在很多与服务器之间的数据交互的地方&#xff0c;XML是首选方案。 此包可以解决XML文件的解析、对象转化为XML字符串的问题。 1 通过调用解析类&#xff0c;可以将XML的DATA数据转换为XmlNode对象&#xff0c;XmlNode以树形结构进…

苹果iOS 6悄然启用新型精准广告追踪技术

北京时间10月12日下午消息&#xff0c;据美国科技博客BusinessInsider报道&#xff0c;在今年9月推出iOS 6后&#xff0c;苹果开始通过一项名为IFA或IDFA的新技术追踪用户&#xff0c;发布精准广告。 在此之前&#xff0c;广告主原本可以借助UDID识别码追踪iPhone用户&#xf…

合并果子 <每日一题分享>

题目链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器&#xff0c;C、Java、前端、产品、运营技能学习/备考/求职题库&#xff0c;在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://…

java Map集合获取方法

常见获取方法如下 我们直接用代码来演示一下 首先是get public static void main(String args[]) {Map<String,String> map new HashMap<String,String>();map.put("嬴政","白起");map.put("刘备","赵云");map.put(&…

iOS开发那些事--OCUnit测试框架

使用OCUnit测试框架iOS单元测试框架 原则上&#xff0c;是否使用测试框架都不会影响单元测试结果&#xff0c;但是“工欲善其事&#xff0c;必先利其器”使用单元测试框架更便于我们测试和分析结果。 主要的iOS单元测试框架有&#xff1a; OCUnit&#xff0c;是开源测试框架…

校门外的数 (暴力法 及 差分法 详解)<每日一题>

题目链接&#xff1a; 登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器&#xff0c;C、Java、前端、产品、运营技能学习/备考/求职题库&#xff0c;在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https:…

el-upload实现图片压缩

首先我们需要一个第三方插件 image-conversion npm install --save image-conversionel-upload按钮我们通过before-upload对用户现在的图片文件进行压缩处理 <el-uploadaction"#":show-file-list"false":before-upload"beforeUpload"accept…

java Collections基本概念和常用方法

Collections是一个类 他在java的util包下 所以使用它是需要导包的 Collections是一个静态方法的集合类 他里面的方法都是静态的 Collections中的方法有很多 这里我们主要看三个 Collections的方法都是针对list集合的 所以 我们先引入List的依赖 import java.util.ArrayList;…