备战蓝桥杯---搜索(进阶1)

news2024/11/19 16:42:55

话不多说,直接看题:

没有传送带时,我们可以直接BFS,但因为传送带的出现,可能在队列里的元素到起点时间不单调的问题,而BFS本来就是可以看成随着时间推移而产生的情况,于是我们把队列看成优先队列即可。重复位置只选一次。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int r,c,a[1010][1010],rs,cs,rd,cd,vis[1010][1010],t;
char q;
int dir[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
struct node{
    int x,y,t;
};
deque<node> qq;
void bfs(void){
    qq.push_front({rs,cs,0});
    while(!qq.empty()){
        node ss=qq.front();
        qq.pop_front();
        if(ss.x==rd&&ss.y==cd){
            cout<<ss.t;
            return;
        }
        if(vis[ss.x][ss.y]!=0) continue;
        vis[ss.x][ss.y]=1;
        int xx=ss.x+dir[a[ss.x][ss.y]][0];
        int yy=ss.y+dir[a[ss.x][ss.y]][1];
        if(vis[xx][yy]==0&&xx>0&&xx<=r&&yy>0&&yy<=c){
            qq.push_front({xx,yy,ss.t});
        }
        for(int i=0;i<=7;i++){
            int xxx=ss.x+dir[i][0];
            int yyy=ss.y+dir[i][1];
            if(xxx<=0||xxx>r||yyy<=0||yyy>c) continue;
            if(vis[xxx][yyy]==0){
                qq.push_back({xxx,yyy,ss.t+1});
            }
        }
    }
    return;
}
int main(){
    cin>>r>>c;
       
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
           cin>>q;
            a[i][j]=q-'0';
        }
    }
    
    cin>>t;
    while(t--){
        while(!qq.empty()) qq.pop_back();
        memset(vis,0,sizeof(vis));
        scanf("%d%d%d%d",&rs,&cs,&rd,&cd);
        bfs();
        cout<<endl;
    }
}

接下来让我们看看今典的0/1BFS

下面是分析:

我们把顺水流当作0的传送带,于是问题跟上一个类似。

但是,因为只存在两个值,我们用双端队列即可(把顺水流放在队列前,正常的放队尾即可,O(1))

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int r,c,a[1010][1010],rs,cs,rd,cd,vis[1010][1010],t;
char q;
int dir[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
struct node{
    int x,y,t;
};
deque<node> qq;
void bfs(void){
    qq.push_front({rs,cs,0});
    while(!qq.empty()){
        node ss=qq.front();
        qq.pop_front();
        if(ss.x==rd&&ss.y==cd){
            cout<<ss.t;
            return;
        }
        if(vis[ss.x][ss.y]!=0) continue;
        vis[ss.x][ss.y]=1;
        int xx=ss.x+dir[a[ss.x][ss.y]][0];
        int yy=ss.y+dir[a[ss.x][ss.y]][1];
        if(vis[xx][yy]==0&&xx>0&&xx<=r&&yy>0&&yy<=c){
            qq.push_front({xx,yy,ss.t});
        }
        for(int i=0;i<=7;i++){
            int xxx=ss.x+dir[i][0];
            int yyy=ss.y+dir[i][1];
            if(xxx<=0||xxx>r||yyy<=0||yyy>c) continue;
            if(vis[xxx][yyy]==0){
                qq.push_back({xxx,yyy,ss.t+1});
            }
        }
    }
    return;
}
int main(){
    cin>>r>>c;
       
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
           cin>>q;
            a[i][j]=q-'0';
        }
    }
    
    cin>>t;
    while(t--){
        while(!qq.empty()) qq.pop_back();
        memset(vis,0,sizeof(vis));
        scanf("%d%d%d%d",&rs,&cs,&rd,&cd);
        bfs();
        cout<<endl;
    }
}

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

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

相关文章

Matlab使用点云工具箱进行点云配准ICP\NDT\CPD

一、代码 主代码main.m&#xff0c;三种配准方法任选其一 % 读取点云文件 source_pc pcread(bun_zipper.ply); target_pc pcread(bun_zipper2.ply);% 下采样 ptCloudA point_downsample(source_pc); ptCloudB point_downsample(target_pc);% 配准参数设置 opt param_set…

有关网络安全的课程学习网页

1.思科网络学院 免费学习skillsforall的课程 课程链接&#xff1a;Introduction to Cybersecurity by Cisco: Free Online Course (skillsforall.com) 2.斯坦福大学计算机和网络安全基础 该证书对于初学者来说最有价值&#xff0c;它由最著名的大学之一斯坦福大学提供。您可…

卫星通讯领域FPGA关注技术:算法和图像方面(1)

最近关注的公众号提到了从事移动通信、卫星通讯等领域的FPGA、ASIC、信号处理算法等工程师可能需要关注的技术&#xff0c;有LMS算法、RLS算法、LCMV算法、SAR图像处理&#xff0c;以下做了一些基础的调研&#xff1a; 1 LMS算法&#xff1a; LMS&#xff08;Least Mean Squa…

springboot170图书电子商务网站的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

elasticsearch下载及可视化工具下载使用

elasticsearch下载及配置、启动 一、下载 Download Elasticsearch | Elastic 二、启动 双击bat即可。 出现如下说明启动成功&#xff1a; 访问测试&#xff1a; 三、注意 &#xff08;1&#xff09;因为es启动默认端口是&#xff1a;9200,所以需要检查此端口是否被占用。…

unity-ios-解决内购商品在Appstore上面已配置,但在手机测试时却无法显示的问题

自己这几天用 unity 2021 xcode 14.2 开发ios内购&#xff0c;appstore上面内购商品都已经配置好了&#xff0c;但是在手机里就是不显示&#xff0c;最后才发现必需得满足以下条件才行&#xff1a; 1. Appstore后台 -> 内购商品 -> 商品状态必需为『准备提交』以上状态…

【万题详解】洛谷P1282 多米诺骨牌

题目 链接——题目在这里&#xff01;&#xff01;&#xff01; 多米诺骨牌由上下 22 个方块组成&#xff0c;每个方块中有 1∼6 个点。现有排成行的上方块中点数之和记为 S1​&#xff0c;下方块中点数之和记为 S2​&#xff0c;它们的差为 ∣∣S1​−S2​。如图S161119&…

最佳视频转换器软件:2024年视频格式转换的选择

我们生活在一个充满数字视频的世界&#xff0c;但提供的内容远不止您最喜欢的流媒体服务目录。虽然我们深受喜爱的设备在播放各种自制和下载的视频文件方面变得越来越好&#xff0c;但在很多情况下您都需要从一种格式转换为另一种格式。 经过大量测试&#xff0c; 我们尝试过…

谷歌发布AI新品Gemini及收费模式;宜家推出基于GPT的AI家装助手

&#x1f989; AI新闻 &#x1f680; 谷歌发布AI新品Gemini及收费模式 摘要&#xff1a;谷歌宣布将原有的AI产品Bard更名为Gemini&#xff0c;开启了谷歌的AI新篇章。同时推出了强化版的聊天机器人Gemini Advanced&#xff0c;支持更复杂的任务处理&#xff0c;提供了两个月的…

【MySQL】数据库基础 -- 详解

一、什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 一般的文件确实提供了数据的存储功能&#xff0c;但是文件并没有提供非常好的数据&#xff08;内容&#xff09;的管理能力&#xff08;用户角度&#xff09;。 文件保存数据有以下几个缺点&…

《MySQL 简易速速上手小册》第8章:事务管理和锁定策略(2024 最新版)

文章目录 8.1 理解 MySQL 中的事务8.1.1 基础知识8.1.2 重点案例&#xff1a;使用 Python 实现银行转账事务8.1.3 拓展案例 1&#xff1a;处理并发事务8.1.4 拓展案例 2&#xff1a;使用 Python 监控事务状态 8.2 锁定机制和事务隔离级别8.2.1 基础知识讲解8.2.2 重点案例&…

《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(12)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述&#xff08;11&#xff09; 4.2 PCIe体系结构的组成部件 PCIe总线作为处理器系统的局部总线&#xff0c;其作用与PCI总线类似&#xff0c;主要目的是为了连接处理器系统中的外部设备…

Java强训day14(选择题编程题)

选择题 编程题 题目1 import java.util.Scanner;public class Main {public static void main(String[] args) {//读入年月日&#xff08;字符串形式读入&#xff09;Scanner sc new Scanner(System.in);String s sc.nextLine();String[] ss s.split(" ");i…

C语言学习day12:水仙花(do while)

前面我们学习了do while循环&#xff0c;今天做一个练习&#xff1a;水仙花 题目&#xff1a;一个三位数&#xff08;100-999&#xff09;&#xff0c;获取其中所有各个位数的相加等于这个数本身 的数 尽量自己先写一写&#xff0c;差不多了再看答案 思路&#xff1a; 先获…

【医学大模型 尘肺病】PneumoLLM:少样本大模型诊断尘肺病新方法

PneumoLLM&#xff1a;少样本大模型诊断尘肺病新方法 提出背景PneumoLLM 框架效果 提出背景 论文&#xff1a;https://arxiv.org/pdf/2312.03490.pdf 代码&#xff1a;https://github.com/CodeMonsterPHD/PneumoLLM/tree/main 历史问题及其背景&#xff1a; 数据稀缺性问题&a…

HarmonyOS 鸿蒙 ArkTS 双色旋转动画效果

下载地址&#xff1a; https://download.csdn.net/download/weixin_54226053/88818859 也可以点击顶部的资源下载

88 SRC挖掘-拿下CNVD证书开源闭源售卖系统

目录 1&#xff0e;开源系统、闭源系统、售卖系统2&#xff0e;如何寻找上述三类系统并进行安全测试3&#xff0e;如何挑简单的入手最快速度获取证书装x演示案例:某开源逻辑审计配合引擎实现通用某闭源审计或黑盒配合引擎实现通用某售卖审计或黑盒配合引擎实现通用 涉及资源&am…

手撸一个M3U8下载插件

M3U8嗅探下载 思路与核心代码 基本思路 ​ M3U8视频格式是一种基于HTTP Live Streaming&#xff08;HLS&#xff09;协议的视频文件格式。它是苹果公司开发的&#xff0c;目前广泛应用于iOS、macOS和tvOS等系统中。与传统的视频格式不同&#xff0c;M3U8视频格式将整个视频分…

Nginx 配置 SSL证书

成功配置SSL证书后&#xff0c;您将能够通过HTTPS加密通道安全访问Nginx服务器。 一、准备材料 SSL证书绑定的域名已完成DNS解析&#xff0c;即您的域名与主机IP地址相互映射。您可以通过DNS验证证书工具&#xff0c;检测域名DNS解析是否生效。具体操作&#xff1a; 【1】登录…

双活工作关于nacos注册中心的数据迁移

最近在做一个双活的项目&#xff0c;在纠结一个注册中心是在双活机房都准备一个&#xff0c;那主机房的数据如果传过去呢&#xff0c;查了一些资料&#xff0c;最终在官网查到了一个NacosSync 的组件&#xff0c;主要用来做数据传输的&#xff0c;并且支持在线替换注册中心的&a…