[蓝桥杯]真题讲解: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.hqwc.cn/news/687791.html

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

相关文章

现场工程师出手--虚拟化软件预留内存过大导致其他程序崩溃问题

项目场景&#xff1a; 一位学生有一台笔记本电脑&#xff0c;安装了Android&#xff0c;Kafka虚拟机很多软件。笔记本配置了20GB内存&#xff0c;固态硬盘&#xff0c;但最近很卡&#xff0c;Android Stuido经常闪退&#xff0c;一些游戏也无法运行。 问题描述 由于Android S…

【python量化交易】qteasy使用教程05——创建第一个自定义交易策略

创建第一个自定义交易策略 使用qteasy创建自定义交易策略开始前的准备工作本节的目标自定义策略的实现方法使用 qteasy 的 Strategy 策略类三种不同的自定义策略基类定义一个双均线择时交易策略定义策略运行时机定义策略需要的数据自定义交易策略的实现&#xff1a;realize()获…

电子学会C/C++编程等级考试2024年03月(四级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:最长上升子序列 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK…

自适应调节Q和R的自适应UKF(AUKF_QR)的MATLAB程序

简述 基于三维模型的UKF&#xff0c;设计一段时间的输入状态误差较大&#xff0c;此时通过对比预测的状态值与观测值的残差&#xff0c;在相应的情况下自适应调节系统协方差Q和观测协方差R&#xff0c;构成自适应无迹卡尔曼滤波&#xff08;AUKF&#xff09;&#xff0c;与传统…

【敦煌网注册/登录安全分析报告】

敦煌网注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大…

广交会资料缺了时效性有用吗?白忙活了

广交会资料开发客户有哪些难度&#xff1f; 1.如何辨别数据的真实性 展会客户真实可信&#xff0c;无需求者不会远道而来。但部分采购商为保护隐私和简便行事&#xff0c;联系方式有所保留。因此&#xff0c;数据筛选与深挖需耗费精力和耐心。 2.历史陈旧数据具备客户开发价值…

[Bug]:由于中国防火墙,无法连接 huggingface.co

问题描述 : OSError: We couldnt connect to https://huggingface.co to load this file, couldnt find it in the cached files and it looks like youscan/ukr-roberta-base is not the path to a directory containing a file named config. Json. Checkout your internet …

前端动画requestAnimationFrame

window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画&#xff0c;并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数&#xff0c;该回调函数会在浏览器下一次重绘之前执行。 备注&#xff1a; 若你想在浏览器下次重绘…

《C语言文件处理:从新手到高手的跃迁》

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

实用的Chrome命令 帮你打开Chrome浏览器的隐藏功能

前言 Chrome作为主力浏览器&#xff0c;支持相当丰富的第三方扩展&#xff0c;其实浏览器本身也内置了大量实用的命令。许多实用的功能并没有直接显示在Chrome的菜单上。在这篇文章中&#xff0c;我们将介绍几个实用的chrome:// commands。 通过下面整理的 Chrome 命令&#x…

【未公开】电信网关配置管理系统rewrite接口存在文件上传漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

x264 帧类型决策模块 x264_slicetype_decide 函数原理分析

======================================================================== ======================================================================== x264帧类型决策 x264 的帧类型决策可以参考: