蓝桥冲刺31天之第八天

news2025/7/15 22:55:47

有人喜欢你,有人讨厌你;

有人在乎你,有人轻视你;

有人赞美你,有人批判你。

尊重所有的声音,但只成为自己;

不必借光而行,你我亦是星辰。

迷宫

 

只有一个题,迷宫,bfs模板题

假设现在我们站在一个没有传送阵的位置上,那么下一次可以延伸的方向是否如下图所示:

在这呢需要各位先学习一下队列的知识Queue(单端队列)
在不考虑传送阵的情况下,每一次入队周围4个未判断过的点

如果出现了传送阵,那么传送阵另一端的点也要加入队列(前提未经过),因为先经过的点花费的一定比后经过点要少

通过Map给每一个有传送点的位置标记,当我们走到某个位置,判断周围四个点,然后判断是否有传送阵,再判断传送阵的另一端是否经过

那么怎么计数呢?

如上图。假设红点位置为0,那么蓝点位置=红点+1;绿点位置=蓝点+1;每一次我们都添加上当前加入队列的值即可

import java.util.*;
import java.io.*;
public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  static StreamTokenizer st = new StreamTokenizer(br);
  static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
	static int n, m;
	static int[][]arr = new int[2010][2010];
	static Map<String, List<int[]>> map = new HashMap<>();
	static double ans = 0;
	public static void main(String[] args) throws Exception {
		n = nextInt();
		m = nextInt();
		for (int i = 0; i < m; i++) {
			String[] kk = br.readLine().split(" ");
			int x1 = Integer.parseInt(kk[0]), y1 = Integer.parseInt(kk[1]);
			int x2 = Integer.parseInt(kk[2]), y2 = Integer.parseInt(kk[3]);
			String s = x1 + ":" + y1, ss = x2 + ":" + y2;
			add(s, x2, y2);
			add(ss, x1, y1);
		}
		bfs();
		pw.printf("%.2f", ans / (n * n));
		pw.flush();
	}
	public static void bfs() {
		Queue<int []> q = new LinkedList<>();
		q.add(new int[] {n, n});//从终点开始往前走,走到每一个点
		arr[n][n] = 0;
		int xa,ya;
		while (!q.isEmpty()) {//队列为空时结束
			int []t=q.poll();//弹出队头
			int x=t[0],y=t[1];
			for(int i=-1;i<2;i+=2){//上下两边的判断
			    xa=x+i;
			    if(pd(xa,y)){
			        q.add(new int[]{xa,y});//加入队列
			        arr[xa][y]=arr[x][y]+1;//到达这一个位置的最小步数
			        ans+=arr[xa][y];//计数
			    }
			}
			for(int i=-1;i<2;i+=2){//左右两边的判断
			    ya=y+i;
			    if(pd(x,ya)){
			        q.add(new int[]{x,ya});//加入队列
			        arr[x][ya]=arr[x][y]+1;//到达这一个位置的最小步数
			        ans+=arr[x][ya];//计数
			    }
			}
			String key = x + ":" + y;
			if (map.containsKey(key)) {//传送阵的判断
				List<int[]> li = map.get(key);
				for (int[] b: li) {
					if (pd(b[0], b[1])) {
						q.add(new int[] {b[0], b[1]});//加入队列
						arr[b[0]][b[1]] = arr[x][y]+1;//到达这一个位置的最小步数
						ans+=arr[b[0]][b[1]];//计数
					}
				}
			}
		}
	}
	public static void add(String key, int x, int y) {//存放传送阵
		List<int[]> li = map.getOrDefault(key, new ArrayList<>());
		li.add(new int[] {x, y});
		map.put(key, li);
	}
	public static boolean pd(int x, int y) {//判断改点是否在迷宫范围内且为经过
		if (x>=1&&x<=n&&y>=1&&y<=n&&arr[x][y]==0&&x*y<n*n) return true;
		return false;
	}
	public static int nextInt() throws Exception {//int型
        st.nextToken();
        return (int) st.nval;
    }
    public static long nextLong() throws Exception {//long型
        st.nextToken();
        return (long) st.nval;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C. Celex Update(数学题)

C. Celex Update&#xff08;数学题&#xff09;一、问题二、分析三、代码一、问题 二、分析 这道题简单的来说就是在图上给定我们起点和终点&#xff0c;从起点到终点会有很多路径&#xff0c;不同的路径会经过不同的点&#xff0c;一条路径上经过的点可以计算出一个和&#…

第十一届——8走方格(找规律,规律总结)

题目&#xff1a;试题 H: 走方格时间限制: 1.0s 内存限制: 256.0MB 本题总分&#xff1a;20 分【问题描述】在平面上有一些二维的点阵。这些点的编号就像二维数组的编号一样&#xff0c;从上到下依次为第 1 至第 n 行&#xff0c;从左到右依次为第 1 至第 m 列&#xff0c;每一…

计算机科学导论笔记(八)

十、软件工程 软件工程是指合理利用工程方法和原则写出能在真实机器上工作的可靠软件的过程。 10.1 软件生命周期 软件生命周期是软件工程中的基础概念&#xff0c;软件和其他产品一样&#xff0c;周期性地重复着一些阶段。 软件开发完成之后&#xff0c;通常需要使用一段时…

【25】Verilog进阶 - 序列检测

VL25 输入序列连续的序列检测 本题并不难【中等】难度给高了 【做题关键】 (1)需要使用移位寄存器的思路。其实reg型是寄存器,也可以当做是移位寄存器,重要的是对其的处理,使用的是移位寄存器的思路 (2)注意新移入数据存放在低位 1 题目 + 代码 + TestBench 很简单,没…

大数据集群保姆级安装教程——Centos集群(vagrant+virtualbox篇)

大数据集群保姆级安装教程——Centos集群&#xff08;vagrantvirtualbox篇&#xff09; 操作系统与软件版本介绍&#xff1a; 项目版本操作系统windows 10 x64Vagrantvagrant_2.2.19_windows_amd64.msiVirtualBoxVirtualBox-6.1.42-155177-Win.exe 一、Vagrant 安装教程 1.1…

一天搞定《AI工程师的PySide2 PyQt5实战开发手册》

PySide2/PySide6、PyQt5/PyQt6&#xff1a;都是基于Qt 的Python库&#xff0c;可以形象地这样说&#xff0c;PySide2 是Qt的 亲儿子(Qt官方开发的) &#xff0c; PyQt5 是Qt还没有亲儿子之前的收的 义子 &#xff08;Riverbank Computing这个公司开发的&#xff0c;有商业版权限…

vscode通过ssh连接ubuntu系统

折腾了好久&#xff0c;终于能够远程连上了&#xff0c;开心的记录一下哈哈( •̀ ω •́ )✧ 1.Ubuntu端 先把虚拟机网络适配器改为桥接模式。 通过ifconfig命令查看虚拟机的IP地址&#xff0c;如果没有该命令则先安装net-tools&#xff0c;记录当前的IP地址。 rootRobotM…

ROS项目的GDB调试

首先安装gdb和xterm sudo apt install xterm Ubuntu系统一般默认自带gdb&#xff0c;通过 gdb -v 看看有没有输出&#xff0c;有版本输出则已安装&#xff0c;就不用再安装了 sudo apt install gdb 开启编译选项 使用Debug调试&#xff0c;首先需要在程序编译时 加上debu…

自主HttpServer实现(C++实战项目)

文章目录项目介绍CGI技术概念原理设计框架日志文件TCPServer任务类初始化与启动HttpServerHTTP请求结构HTTP响应结构线程回调EndPoint类EndPoint主体框架读取HTTP请求处理HTTP请求CGI处理非CGI处理构建HTTP响应发送HTTP响应接入线程池简单测试项目扩展项目介绍 该项目是一个基…

Python 算法交易实验53 Step2.1 Signals 信号生成

说明 上次提到了基于传统的趋势法构建一组基础信号的方法&#xff0c;并做了简单的交易测算。本次计划对方法和测算做一下Review&#xff0c;同时明确接下来基于ADBS(Step2)进行承接时需要计算的数据。 内容 1 方法回顾 传统的趋势方法(SMA-LMA)采用“短线上升且突破长线买…

Spring Security Oauth2以及整合sso

Oauth2认证 第三方认证技术方案最主要是解决认证协议的通用标准问题&#xff0c;因为要实现跨系统认证&#xff0c;各系统之间遵循一定的接口协议。 Oauth协议为用户资源授权提供了一个安全的&#xff0c;开放的而又简单的标准&#xff0c;同时&#xff0c;任何第三方都可以使用…

【Linux系统编程】08:信号量

信号量 OVERVIEW信号量1.mmap内存映射2.semget信号量获取3.semctl信号量控制4.semop信号量操作5.使用案例1.mmap内存映射 mmap映射的是磁盘中的文件&#xff0c;而共享内存是将内存映射到用户的进程空间中 原型&#xff1a;void *mmap(void *addr, size_t length, int prot, …

DHCP中继配置

1. 实验目的 熟悉DHCP中继的应用场景掌握DHCP中继的配置方法2. 实验拓扑 DHCP中继配置实验拓扑如图15-10所示: 图15-10:DHCP中继配置 3. 实验步骤 IP地址的配置AR1的配置 <Huawei>system-view

VCO pulling

这次调试项目 目前复现的问题 2.4g干扰到5g 问题就是2.4g 5g 同时发包&#xff0c;5g evm直接从37-38变成33-34 于是我对vco-pulling做了一个小结 VCO pulling是指当一个外部信号对振荡器的频率产生影响时&#xff0c;振荡器的频率将被拉动或偏移。这种现象通常会在无线电通…

SpringBoot嵌入式Servlet容器 相关学习笔记

大家都知道SrpingBoot是内嵌Servlet容器的&#xff0c;并且默认是Tomcat&#xff0c;本文主要讲一下其中原理。   首先&#xff0c;SpringBoot是支持其它容器的&#xff0c;除了Tomcat外&#xff0c;还有Undertow&#xff0c;Netty以及Jetty。并且这些容器经过封装&#xff0c…

KAT: A Knowledge Augmented Transformer for Vision-and-Language

Paper name KAT: A Knowledge Augmented Transformer for Vision-and-Language Paper Reading Note URL: https://arxiv.org/pdf/2112.08614.pdf TL;DR 2022 NAACL 论文&#xff0c;提出了 Knowledge AugmentedTransformer (KAT)&#xff0c;提出了一种同时利用显式和隐式…

记录第一次安装部署datadonphon遇到的坑和解决办法

故事开始之前&#xff0c;我在3台服务器里新建了一个abin用户&#xff0c;3台服务器都用abin和root账号做了免密登录。故事开始了......按照官网文档一顿操作猛如虎到了配置集群了。那就配置呗&#xff0c;点它。仔细阅读了提示&#xff0c;嗯&#xff0c;明白它的意思了。来吧…

Python进阶-----高阶函数->filter() 函数

目录 前言&#xff1a; filter() 函数介绍 filter() 函数使用示例 1.与循环对比 2.与lambda函数综合使用 3.使用None过滤False 4.过滤字典相关数据 前言&#xff1a; 家人们&#xff0c;当你们获取了一个序列的时候&#xff0c;想要把一些内容去掉&#xff0c;保留一部分…

《JavaEE》进程和线程的区别和联系

&#x1f451;作者主页&#xff1a;Java冰激凌 &#x1f4d6;专栏链接&#xff1a;JavaEE 目录 进程是什么&#xff1f; 线程是什么&#xff1f; 进程和线程之间的联系~ ps1&#xff1a;假设我们当前的大兴国际机场有一条登机口可以登入飞机 ps2&#xff1a;我们为…

运动员最佳匹配问题(详解)

一、问题描述 羽毛球队有男女运动员各n人。给定2个nn矩阵P和Q。 P[i][j]是男运动员i的女运动员j配对组成混合双打的男运动员竞赛优势&#xff1b;Q[i][j]是女运动员i和男运动员j配对的女运动员竞赛优势。由于技术配合和心理状态等各种因素影响&#xff0c;P[i][j]不一定等于Q[…