蓝桥杯 回忆迷宫 BFS DFS暴力模拟

⭐ 题目地址
在这里插入图片描述
在这里插入图片描述
样例输入

17
UUUULLLLDDDDRRRRU

样例输出

 *****
*     *
* *** *
* *** *
* *** *
*     *
 *****

🤠 注意方向:颠倒数组,行下标 是 y,列下标 是 x

import java.util.*;

public class Main
{
static int n;
	static int N = 400;
//	1 表示路,2表示墙,3表示外边的未知领域,默认 0 
	static int[][] g = new int[N][N];
	static String s;

	static HashMap<Character, Integer> map = new HashMap<>();// 偏移量映射
	static int[] dx = { 0, 0, -1, 1 };
	static int[] dy = { 1, -1, 0, 0 };
	static int maxx = 0, minx = 320;
	static int maxy = 0, miny = 320;

	static class Pair
	{
		int x;
		int y;

		public Pair(int x, int y)
		{
			super();
			this.x = x;
			this.y = y;
		}
	}

	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		s = sc.next();
    // 方向,最后一步走的方向为 U 为 左,所以 U 映射成向左移一位
		map.put('U', 2);
		map.put('D', 3);
		map.put('L', 1);
		map.put('R', 0);
		dfs(150, 150, 0);// 先在大地图中打下迷宫的路和迷宫的墙

		bfs(0, 0);// 迷宫外的未知领域标记为3
//		System.out.println("bug!");

//		最会处理里边的墙中墙就好啦,顺便输出
		for (int i = minx; i <= maxx; i++)
		{
			for (int j = miny; j <= maxy; j++)
			{
				if (g[i][j] == 1 || g[i][j] == 3)// 路和未知领域都 是 空格
					System.out.print(" ");
				else
				{
					System.out.print("*");// 里边的 0 也是 墙(墙中墙)
				}
			}
			System.out.println();
		}
	}

//	宽搜 起点 (sx,sy)
	private static void bfs(int sx, int sy)
	{
		Pair[] q = new Pair[N * N];
		int hh = 0;
		int tt = -1;
		q[++tt] = new Pair(sx, sy);

		while (hh <= tt)
		{
			Pair t = q[hh++];
			int x = t.x;
			int y = t.y;
			for (int i = 0; i < 4; i++)
			{
				int xx = x + dx[i];
				int yy = y + dy[i];
				if (xx >= 0 && xx <= maxx + 50 && yy >= 0 && yy <= maxy + 50 && g[xx][yy] == 0)
				{
					g[xx][yy] = 3;
					q[++tt] = new Pair(xx, yy);
				}
			}
		}
	}

//	(x,y)表示的是当前点的坐标,u表示的是下一步的移动方向
	private static void dfs(int x, int y, int u)
	{
		g[x][y] = 1;// 先开路
//		除了路周围都是墙
		for (int i = 0; i < 4; i++)
		{
			int xx = x + dx[i];
			int yy = y + dy[i];
			if (g[xx][yy] != 1)
				g[xx][yy] = 2;
//			开疆扩土,记录国界
			minx = Math.min(minx, xx);
			maxx = Math.max(maxx, xx);
			miny = Math.min(miny, yy);
			maxy = Math.max(maxy, yy);
		}
//		最后一步操作是 n-1,所以 n 是递归终点
		if (u == n)
			return;

//		移动当前这步
		int nx = x + dx[map.get(s.charAt(u))];
		int ny = y + dy[map.get(s.charAt(u))];
		dfs(nx, ny, u + 1);
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/9460.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何用jmeter+ant+jenkins搭建一个接口自动化测试框架?

目录 前言 一、什么是Jmeter&#xff1f; 二、什么是Ant&#xff1f; 三、什么是Jenkins&#xff1f; 四、如何构建一个JmeterAntJenkins的接口自动化测试框架&#xff1f; 五、JmeterAntJenkins接口自动化测试框架的优势和特点 六、总结 前言 Jmeter是一款功能强大的开…

2023年Win11备份文件的快捷方式

文件备份对于数据保护非常重要。无论是什么类型的文件&#xff0c;如照片、文档、音频、视频&#xff0c;它们对您来说都是独一无二的、珍贵的&#xff0c;因此您想备份文件并保护它们。 首先&#xff0c;备份文件无疑是保护文件的好习惯&#xff0c;尤其是定时备份。其次&…

笔记本可自行更换CPU、独显了,老外用它手搓了台“PS5”

前面说到微软打算在 Win12 出来前搞出个模块化的Windows&#xff1a;下一个系统不是Win12&#xff0c;微软要复活Win10X。 模块化不用小蝾再过多介绍了&#xff0c;就像积木一样拼在一起组成一个整体。 优势就很明显了&#xff0c;由于每个部分都是单独的模块&#xff0c;更新…

ChatGPT如何写作-怎么让chatGPT批量写作

ChatGPT如何写作 使用 ChatGPT 进行写作一般可以遵循以下步骤&#xff1a; 定义写作主题和目的。确定写作主题和目的&#xff0c;包括要解决的问题、目标读者群体以及需要涵盖的主要内容。 收集文献和资料。收集与主题相关的文献和资料&#xff0c;可以从互联网、书籍、报刊杂…

Spring Cloud组件源码之OpenFeign源码分析

" Spring 到底是春天的来临万物复苏&#xff0c;还是春转夏的干燥又炎热呢&#xff1f;" Spring的来临让JavaEE走向了另一个高度。便捷的开发&#xff0c;完美的生态。物极必反&#xff0c;学习Spring的成本越来越低&#xff0c;导致Java程序员越来越密集&#xff0…

VS2022编译libui库

libui是一个 C 中简单且可移植(但并非不灵活)的 GUI 库,它使用每个平台原生的GUI技术进行绘制。 官网地址:链接 本文将使用VS2022编译libui库,操作系统为Windows10。 1. 下载源代码 首先在官网下载源代码,由于此代码不依赖第三库,故只需下载源代码即可进行编译。 我下…

JavaScript函数中的arguments(js函数中的arguments,函数默认参数arguments)

简述&#xff1a;js中的函数大家都比较熟悉&#xff0c;今天来分享下函数中的默认参数arguments。js的函数参数和其他的语言有些不同&#xff0c;它并不介意你传进来多少个参数&#xff0c;以及参数的数据类型&#xff0c;即使你在定义函数时&#xff0c;只设置了两个形参&…

「解析」Matplotlib 绘制折线图

相比于【优雅】matplotlib 常见图、【优雅】matplotlib 3D图 而言&#xff0c;折线图使用的频率会更高一些&#xff0c;在此整理下最近使用 Matplotlib 绘制折线图常用的一些配置&#xff0c;小伙伴们只需要修改对应的 aug_list、list 即可直接使用 # !/usr/bin/env python …

asp.net mvc学习(三)

Razor语法 Razor语法特点 结构性强&#xff0c;容易阅读。易于学习。不是新的语言。在任何编辑器上编写Razor都很容易。与ide充分结合。 Razor语法主要规则 Razor代码封装于{...}中。 行内表达式&#xff08;变量和函数&#xff09;以开头 代码语句以分号结尾 字符串由引号…

Python 进阶指南(编程轻松进阶):八、常见的 Python 陷阱

原文&#xff1a;http://inventwithpython.com/beyond/chapter8.html 虽然 Python 是我最喜欢的编程语言&#xff0c;但它也不是没有缺陷。每种语言都有缺点&#xff08;有些比其他的多&#xff09;&#xff0c;Python 也不例外。新的 Python 程序员必须学会避免一些常见的“陷…

JavaScript 中问号的三种用法 ??和?.以及?: 您知道吗?

最近看了一些关于JavaScript的测试脚本&#xff0c;觉得JS 中问号的用法还是蛮有意思的&#xff0c;于是做了一下总结&#xff0c;在这里分享给大家&#xff01;JS中的问号大概有三种用法&#xff0c;分别是&#xff1a;空值合并操作符、可选链操作符和三目运算。 问号问号&…

如何使用手机远程锁定电脑?

​“有时我已经到家了&#xff0c;却忘记锁上我的公司的电脑。每次我都害怕我电脑上的数据丢失。我可以在手机上远程锁定我的Windows计算机以避免这个问题吗&#xff1f;” 答案是肯定的&#xff01;很多人可能会遇到同样的下班不锁电脑的问题&#xff0c;有的人可能尝…

新规拉开中国生成式AI“百团大战”序幕?

AI将走向何方&#xff1f; ChatGPT在全球范围掀起的AI热潮正在引发越来越多的讨论&#xff0c;AI该如何管理&#xff1f;AI该如何发展&#xff1f;一系列问题都成为人们热议的焦点。此前&#xff0c;马斯克等海外名人就在网络上呼吁OpenAI暂停ChatGPT的模型训练和迭代&#xf…

算法套路八——二叉树深度优先遍历(前、中、后序遍历)

算法套路八——二叉树深度优先遍历&#xff08;前、中、后序遍历&#xff09; 算法示例&#xff1a;LeetCode98&#xff1a;验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只…

Shell脚本之免交互

一、Here Document免交互 1、 概念 Here Document使用I/O重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如 ftp、cat 或 read 命令。 是标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是直接就地生产出一个"文件…

No.033<软考>《(高项)备考大全》【第17章】战略管理

【第17章】战略管理1 章节相关2 战略管理2.1 组织战略管理2.1 组织战略类型和层次2.1.1 组织事业战略类型2.1.2 组织事业战略类型2.1.3 组织完整的战略包括三个层次2.1.4 组织战略从层次分为组织层战略、事业层战略、职能层战略等2.1.5 平横计分卡2.1.6 项目组合管理3 练习题参…

Leetcode.111 二叉树的最小深度

题目链接 Leetcode.111 二叉树的最小深度 easy 题目描述 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从 根节点 到 最近叶子节点 的 最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,nul…

车载网络 - Autosar网络管理 - 网络管理简介

一、什么是CAN网络管理及它的作用 现在的车辆是由大量的ECU节点组成的&#xff0c;为了能使各ECU能够正确并及时地进行CAN通信&#xff0c;需要有一套机制来统一协调总线上各节点的休眠唤醒&#xff0c;这套机制就是CAN网络管理&#xff08;NM&#xff09;。 网络管理的目的是保…

项目2:后端管理员项目结构初始化

项目2&#xff1a;后端管理员项目结构初始化 1.创建数据库和表 2.初始化父项目 3.初始化项目模块 4.初始化core核心模块&#xff08;代码生成器&#xff09; 项目2&#xff1a;后端管理员项目结构初始化 1.创建表 创建数据库 编码使用utf-8 sql语句 /*Navicat Premium …

18_I.MX6ULL_I2C实验

目录 I2C简介 起始位 停止位 数据传输 应答信号 I2C写时序 I2C读时序 I2C多字节读写时序 相关寄存器 AP3216C简介 实验源码 I2C简介 I2C是最常用的通信接口,众多的传感器都会提供I2C接口来和主控相连,比如陀螺仪、加速度计、触摸屏等等。所以I2C是做嵌入式开发必须…