[蓝桥杯]真题讲解:AB路线(BFS+分层图)

[蓝桥杯]真题讲解:AB路线(BFS+分层图)

  • 一、视频讲解
  • 二、正解代码
    • 1、C++
    • 2、python3
    • 3、Java

一、视频讲解

[蓝桥杯]真题讲解:AB路线(BFS+分层图)

在这里插入图片描述

二、正解代码

1、C++

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int N = 1e3 + 10;
int g[N][N];
bool st[N][N][20];
int dis[N][N][20];int n, m, k;
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};bool check(int x, int y) {return x >= 0 && x < n && y >= 0 && y < m;
}int bfs() {for(int i = 0; i < n; i ++) {for(int j = 0; j < m; j ++) {for(int p = 0; p < k; p ++) {dis[i][j][p] = INF;}}}queue<array<int,3>>q;q.push({0, 0, 1});dis[0][0][1] = 1;st[0][0][1] = true;while(q.size()){auto t = q.front();q.pop();int x = t[0], y = t[1], cnt = t[2];int d = dis[x][y][cnt];for(int i = 0; i < 4; i ++) {int nx = x + dx[i];int ny = y + dy[i];int nc = (d / k) % 2;if(check(nx, ny) && g[nx][ny] == nc && !st[nx][ny][(d + 1) % k]) {st[nx][ny][(d + 1) % k] = true;q.push({nx, ny, (d + 1) % k});dis[nx][ny][(d + 1) % k] = d + 1;}}}int minv = INF;for(int i = 0; i < k; i ++) {minv = min(minv, dis[n - 1][m - 1][i]);}return minv;
}void solve(){cin >> n >> m >> k;for(int i = 0; i < n; i ++) {string s; cin >> s;for(int j = 0; j < m; j ++) {g[i][j] = (s[j] != 'A');}}int res = bfs();if(res == INF){cout << -1 << endl;}else{cout << res - 1 << endl;}}int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;while(t--){solve();}return 0;
}

2、python3

from collections import deque
INF = 0x3f3f3f3f
N = 1010
n, m, k = map(int, input().split())
st = [[[False] * 20 for _ in range(N)] for _ in range(N)]
dis = [[[INF] * 20 for _ in range(N)] for _ in range(N)]
g = [[0] * N for _ in range(N)]
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]def check(x, y):return x >= 0 and x < n and y >= 0 and y < mdef bfs():q = deque([(0, 0, 1)])dis[0][0][1] = 1st[0][0][1] = Truewhile q:x, y, cnt = q[0]q.popleft()d = dis[x][y][cnt]for i in range(4):nx = x + dx[i]ny = y + dy[i]nc = (d // k) % 2if check(nx, ny) and g[nx][ny] == nc and st[nx][ny][(d + 1) % k] == False:st[nx][ny][(d + 1) % k] = Trueq.append((nx, ny, (d + 1) % k))dis[nx][ny][(d + 1) % k] = d + 1minv = INFfor i in range(k):minv = min(minv, dis[n - 1][m - 1][i])return minvfor i in range(n):s = input()for j in range(m):if s[j] != 'A':g[i][j] = 1else:g[i][j] = 0
res = bfs()
if res == INF:print(-1)
else:print(res - 1)

3、Java

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class ABRoad {public static final int INF = 0x3f3f3f3f;public static int[] dx = new int[]{-1, 0, 1, 0};public static int[] dy = new int[]{0, 1, 0, -1};public static int n, m, k;public static int[][] g;public static boolean[][][] st;public static int[][][] dis;public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();k = sc.nextInt();g = new int[n + 10][m + 10];st = new boolean[n + 10][m + 10][k + 10];dis = new int[n + 10][m + 10][k + 10];for(int i = 0; i < n; i ++ ) {String s;s = sc.next();for(int j = 0; j < m; j ++) {if(s.charAt(j) != 'A')g[i][j] = 1;elseg[i][j] = 0;}}int res = bfs();if(res == INF)System.out.println(-1);elseSystem.out.println(res - 1);}private static int bfs() {for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {for (int p = 0; p < k; p++) {dis[i][j][p] = INF;}}}Queue<int[]> q = new LinkedList<>();q.add(new int[]{0, 0, 1});dis[0][0][1] = 1;st[0][0][1] = true;while (!q.isEmpty()) {int[] t = q.poll();int x = t[0], y = t[1], cnt = t[2];int d = dis[x][y][cnt];for (int i = 0; i < 4; i++) {int nx = x + dx[i];int ny = y + dy[i];int nc = (d / k) % 2;if (check(nx, ny) && g[nx][ny] == nc && !st[nx][ny][(d + 1) % k]) {st[nx][ny][(d + 1) % k] = true;q.add(new int[]{nx, ny, (d + 1) % k});dis[nx][ny][(d + 1) % k] = d + 1;}}}int minv = INF;for(int i = 0; i < k; i ++) {minv = Math.min(minv, dis[n - 1][m - 1][i]);}return  minv;}private static boolean check(int x, int y) {return x >= 0 && x < n && y >= 0 && y < m;}
}

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

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

相关文章

GO:流程控制

if 用法&#xff1a; if condition {// do something }if condition {// do something } else {// do something }if condition1 {// do something } else if condition2 {// do something else }else {// catch-all or default }switch 相比较 C 和 Java 等其它语言…

PyCharm 集成 Git

目录 1、配置 Git 忽略文件 2、定位Git 3、使用pycharm本地提交 3.1、初始化本地库 3.2、添加到暂存区 3.3、提交到本地库 3.4、切换版本 4、分支操作 4.1、创建分支 4.2、切换分支 4.3、合并分支 5、解决冲突 1、配置 Git 忽略文件 作用&#xff1a;与项目的实际…

问题:幂等性 分布式session

web项目中请求线程到service层的时候远程调用服务之前是串行化执行每个任务都要get阻塞等待任务完成&#xff0c;举例当用户在购物车页面点击去结算就会请求后台toTrade请求获取订单确认的详情数据并渲染到订单详情页&#xff0c;现在在toTrade请求中使用异步任务编排Completab…

Linux下安装mysql8.0(以tar.xz包安装--编译安装)

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; Linux下安装mysql8.0&#xff08;以tar.xz包安装--编译安装&#xff09;https://myweb.myskillstree.cn/126.html 目录 一、下载对应自己glic版本的MySQL …

1.基于python的单细胞数据预处理-降维可视化

目录 降维的背景PCAt-sneUMAP检查质量控制中的指标 参考&#xff1a; [1] https://github.com/Starlitnightly/single_cell_tutorial [2] https://github.com/theislab/single-cell-best-practices 降维的背景 虽然特征选择已经减少了维数&#xff0c;但为了可视化&#xff0…

电气原理图入门要点和难点具体应用详解

学习电气原理图可以让你理解电气系统的基本组成和工作原理。 以下是入门电气原理图的一些基本步骤: 1.了解基本符号: 电气原理图中有很多标准符号代表不同的电气元件,比如电源、电阻、电容、电感、开关等。你需要先了解这些符号以及它们的含义。 2.学习电路图的结构: 电路图…

C++语法|智能指针的实现及智能指针的浅拷贝问题、auto_ptr、scoped_ptr、unique_ptr、shared_ptr和weak_ptr详细解读

文章目录 1.自己实现智能指针智能指针引起的浅拷贝问题尝试定义自己的拷贝构造函数解决浅拷贝 2.不带引用计数的智能指针auto_ptrscoped_ptrunique_ptr&#xff08;推荐&#xff09; 3.带引用计数的智能指针模拟实现引用计数shared_ptr和weak_ptr循环引用&#xff08;交叉引用&…

DDD架构理论详解

文章目录 一、概念入门1. 概念简介2. DDD的核心理念3. 范式4. 模型5. 框架6. 方法论7. 软件设计的主要活动 二、DDD核心理论1. Domain领域层都包含什么&#xff1f;2. 聚合、实体和值对象3. 仓储&#xff0c;封装持久化数据4. 适配&#xff08;端口&#xff09;&#xff0c;调用…

AI应用案例:新闻文本分类

随着科学技术的不断发展&#xff0c;互联网技术得以快速的发展和普及&#xff0c;并已在各行各业得到了广泛的应用&#xff0c;从中致使了网络上的信息呈现出爆炸式的增长状态&#xff0c;达到了“足不出户&#xff0c;万事皆知”的境况&#xff0c;充分体现了互联网新闻给生活…

String字符串的应用

String s0=”apple”; String s1=”apple”; String s2=”app” + “le”; System.out.println( s0==s1 ); System.out.println( s0==s2 ); 输出 true true 双等号比较的是两个对象的引用地址,对于String创建的常量都放到了常量池中,s0、s1、s2存的是指向常量池里面值的引用…

Java实现自定义注解,实现不需要token 验证就可以访问接口

目录 1 问题2 实现 1 问题 一个springboot 项目&#xff0c;需要token 验证&#xff0c;前端传过来token ,我们一般在项目全局写一个过滤器&#xff0c;去验证前端传过来的token ,如果有哪些接口不需要token验证&#xff0c;那么就排除这些接口&#xff0c;这个也需要配置。 …

前端 | TED打卡号分类查询

文章目录 &#x1f4da;实现效果&#x1f4da;模块实现解析&#x1f407;html&#x1f407;css&#x1f407;javascript &#x1f4da;实现效果 提供完整TED打卡号对应TED标题的查询列表 根据分类按需查询 &#x1f4da;模块实现解析 &#x1f407;html 搭框架<div cl…

Android Studio连接MySQL8.0

【序言】 移动平台这个课程要做一个app的课设&#xff0c;我打算后期增加功能改成毕设&#xff0c;就想要使用MySQL来作为数据库&#xff0c;相对于SQLlite来说&#xff0c;我更熟悉MySQL一点。 【遇到的问题】 一直无法连接上数据库&#xff0c;开始的时候查了很多资料&#…

海外云手机解决海外社交媒体运营难题

随着全球数字化浪潮的推进&#xff0c;海外社交媒体已成为外贸企业拓展市场、提升品牌影响力的重要阵地。Tiktok、Facebook、领英、twitter等平台以其庞大的用户基础和高度互动性&#xff0c;为企业提供了前所未有的营销机会。本文将介绍如何通过海外云手机&#xff0c;高效、快…

eNSP中小型园区网络拓扑搭建(下)

→b站直通车&#xff0c;感谢大佬← →eNSP中小型园区网络拓扑搭建&#xff08;上&#xff09;← 不带配置命令的拓扑图已上传~ 配置ospf SW5 # ospf 1 router-id 5.5.5.5area 0.0.0.0network 192.168.51.5 0.0.0.0network 192.168.52.5 0.0.0.0area 0.0.0.10network 192.1…

行业早报5.12

母亲节快乐&#xff01; 1.机构&#xff1a;美团旗下 KeeTa 已成为香港第一大外卖平台&#xff0c;单量份额超四成&#xff1b; 2.苹果公布 24Q1 财报&#xff1a;营收 907.5 亿美元&#xff0c;同比下降 4%&#xff1b;大中华区营收 163.7 亿美元&#xff0c;同比下降 8.1%&am…

MAC创建Pytorch环境

1.安装PyCharm,自己网上下载安装 2.安装miniconda,自己网上下载 3.随便在PyCharm创建个python项目 4.在项目下边的终端输入地方去配置python版本以及PyTorch 配置步骤: 1. 检测miniconda是否可用 输入 conda --version 查看 2 . conda search --full-name python 检测使用…

Kafka 面试题(七)

1. 描述Kafka Controller的作用&#xff1f; Kafka Controller在Kafka集群中扮演着核心管理和协调的角色。它的主要作用包括以下几个方面&#xff1a; 主题管理&#xff1a;Kafka Controller负责创建、删除以及增加主题分区等操作。当我们在任意一台Broker中执行kafka-topic脚…

有时你必须清理电脑上的灰尘,那么多久清理一次合理呢

灰尘的堆积几乎是所有电脑用户面临的问题。无论你的房间有多干净,或者你的电脑是否安装了灰尘过滤器,灰尘都会进入室内,但是你应该多久清理一次灰尘或怎么清理​灰尘呢? 你应该多久给电脑除尘一次 对于你应该多久清理一次电脑上的灰尘,没有硬性规定。这在很大程度上取决…

golang函数默认参数

和java和php等编程语言不通&#xff0c; go语言里面函数的形参是没有默认参数的&#xff0c; 而且在go语言里面函数是一种数据类型&#xff0c;这个和其他常见编程语言也是一个不同点。 虽然go没有默认参数&#xff0c;但是对于他的每个参数都一个默认的零值&#xff0c;数字…