算法-BFS搜索

news2024/11/24 7:27:07

题目一

解题思路

比较标准的暴力搜索+空间换时间的策略

二维数组map表示具体地图,far表示遍历过程中某点到起点的距离。

队列 q 表示在遍历过程中当前距离的所以节点坐标。

每次的节点寻找其上下左右四个方向可以继续前进的点(这里在过程中会发生两个点循环的情况,不过不影响结果,有兴趣可以优化一下)。

边界问题

isVaild函数判断每次寻找的上下左右四个坐标是否合规。

终点判断为(n-1,m-1),因为我的遍历是从(0,0)点开始的。

代码模板

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;

const int N=110;
typedef pair<int,int>PII;

int map[N][N];
int far[N][N];

int n,m;

bool isVaild(int x,int y)
{
    return x>=0&&x<n&&y>=0&&y<m;
}

int bfs(int a,int b)
{
    queue <PII> q;
    q.push({a,b});
    far[a][b]=0;
    int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
    while(!q.empty())
    {
        PII cell=q.front();
        q.pop();
        int x=cell.first;
        int y=cell.second;
        for(int i=0;i<4;i++)
        {
            int nx=x+dx[i];
            int ny=y+dy[i];
            if(isVaild(nx,ny)&&map[nx][ny]==0&&far[nx][ny]==5000)
            {
                far[nx][ny]=far[x][y]+1;
                q.push({nx,ny});
                if(nx==n-1&&ny==m-1)
                    return far[nx][ny];
            }
           
        }
    }
    return 0;
}
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>map[i][j];
            far[i][j]=5000;
        }
    }
    int dis=bfs(0,0);
    cout<<dis<<endl;
    return 0;
}

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

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

相关文章

Java之多线程-同步代码块

线程同步 Java中提供了线程同步的机制&#xff0c;来解决上述的线程安全问题。 Java中实现线程同步&#xff0c;主要借助synchronized关键字实现。 线程同步方式&#xff1a; 同步代码块 同步方法 锁机制 1&#xff09;同步代码块 格式&#xff1a; //Object类及其子类…

Web网页端IM产品RainbowChat-Web的v7.1版已发布

一、关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统&#xff0c;是RainbowChat的姊妹系统&#xff08;RainbowChat是一套基于开源IM聊天框架 MobileIMSDK (Github地址) 的产品级移动端IM系统&#xff09;。 ► 详细介绍&#xff1a;http://www.52im.net/thread-2…

研发(RD)注意事项 / 复杂项目规划、控制方法 PERT 和 CPM

注&#xff1a;机翻&#xff0c;未校对&#xff0c;去掉了原文中广告。 What Is Research and Development (R&D)? 什么是研发&#xff08;R&D&#xff09;&#xff1f; Investopedia / Ellen Lindner Research and Development An ongoing effort to develop or impr…

Spring Boot入门指南:留言板

一.留言板 1.输⼊留⾔信息,点击提交.后端把数据存储起来. 2.⻚⾯展⽰输⼊的表⽩墙的信息 规范&#xff1a; 1.写一个类MessageInfo对象&#xff0c;添加构造方法 虽然有快捷键&#xff0c;但是还是不够偷懒 项目添加Lombok。 Lombok是⼀个Java⼯具库&#xff0c;通过添加注…

Java | Leetcode Java题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution {public void moveZeroes(int[] nums) {int n nums.length, left 0, right 0;while (right < n) {if (nums[right] ! 0) {swap(nums, left, right);left;}right;}}public void swap(int[] nums, int left, int right)…

AI/机器学习(计算机视觉/NLP)方向面试复习3

1. Pooling 有哪些方式&#xff1f;pytorch的实现&#xff1f; Pooling可以分成&#xff1a;最大池化&#xff0c;平均池化&#xff0c;全局平均池化&#xff0c;随机池化&#xff0c;空间金字塔池化。 1. 最大池化&#xff08;Max Pooling&#xff09; 最大池化是最常用的池…

将Android Library项目发布到JitPack仓库

将项目代码导入Github 1.将本地项目目录初始化为 Git 仓库。 默认情况下&#xff0c;初始分支称为 main; 如果使用 Git 2.28.0 或更高版本&#xff0c;则可以使用 -b 设置默认分支的名称。 git init -b main 如果使用 Git 2.27.1 或更低版本&#xff0c;则可以使用 git symbo…

【Django】前端技术-网页样式表CSS

文章目录 一、申明规则CSS的导入方式行内样式内部样式外部样式 二、CSS的选择器1. 基本选择器标签选择器&#xff1a; 选择一类标签 标签{}类选择器 class&#xff1a; 选择所有class属性一致的表情&#xff0c;跨标签.类名{}ID选择器&#xff1a;全局唯一 #id名{} 2.层次选择器…

Element快速学习

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;JavaWeb关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 什么是Element&#xff1f; Element&#xff1a;它是由饿了么团队开发的一个…

cpp程序设计实践,类实现树链刨分以及计算几何类

程序设计要求 是某个cq高校期末程序设计实践作业&#xff0c;全部自己做的比较小众分值90。  试建立一个继承结构&#xff0c;以栈、队列为派生类&#xff0c;建立它们的抽象基类-Bag类&#xff0c;写出各个类的声明及定义&#xff0c;并实现如下功能&#xff1a;  统一命名…

华为高品质万兆园区体验保障技术白皮书

华为高品质万兆园区体验保障技术白皮书 - 华为企业业务 re 音视频会议已经成为企业办公的核心应用系统&#xff0c;尤其是高层会议的质量对企业的运营效率有很大影响&#xff0c;相 关的体验问题也是员工投诉的重灾区。但不同于传统的网络通断类问题,体验类问题涉及的范围大、…

高通QCC3081蓝牙芯片双CVC参数配置与优化指南

高通的QCC3081芯片搭载了领先的高通1-MIC、2-MIC、3-MIC CVC回声消除和噪声抑制技术&#xff0c;无论您身处何地&#xff0c;都能通过蓝牙立体声耳机或耳塞享受清晰的语音通话体验。无论是家中的生活噪音、街道的车流声还是人群的喧哗&#xff0c;这些背景噪声都不再是通话质量…

MATLAB基础:函数与函数控制语句

今天我们继续学习Matlab中函数相关知识。 API的查询和调用 help 命令是最基本的查询方法&#xff0c;可查询所有目录、指定目录、命令、函数。 我们直接点击帮助菜单即可查询所需的API函数。 lookfor 关键字用于搜索相关的命令和函数。 如&#xff0c;我们输入lookfor inpu…

vue-plugin-hiprint 打印 预览打印+静默打印

1.安装 npm install vue-plugin-hiprint npm i socket.io-client --save //为了静默打印 &#xff08;为此还需安装客户端&#xff09; 2…html页面 引入css <link rel"stylesheet" type"text/css" media"print" href"https://cdn.jsde…

MySQL高性能读写分离实战

介绍 我的上一篇文章实现了mysql的主从复制结构&#xff0c;今天这篇继续将如何实现读写分离。 读写分离是指&#xff1a;针对数据库的写操作&#xff08;插入、更新、删除等&#xff09;访问主数据库&#xff0c;读操作访问从数据库。 因为一般网站的读请求的数量是远远大于…

photoshop学习笔记——选区3 选区的变化

选区制作完成之后可以对选区进行变化 主要有&#xff1a; 反选&#xff1a;shift ctrl I 变换 修改&#xff1a; 边界 设置选区的边界大小 类似 CSS中的borderSize平滑 对选区的角进行平滑扩展 向外扩展选区收缩 向内收缩选区羽化 让边界变得过渡透明度 设置…

大数据学习之sparkstreaming

SparkStreaming idea中初步实现 Spark core: SparkContext 核心数据结构&#xff1a;RDD Spark sql: SparkSession 核心数据结构&#xff1a;DataFrame Spark streaming: StreamingContext 核心数据结构&#xff1a;DStream(底层封装了RDD)&#xff0c;遍历出其中的RDD即可进行…

docker 安装单机版redis

把这三个放上去 修改成自己的 按照自己需求来 照图片做 vim redis.conf vim startRedis.sh mv startRedis.sh deployRedis.sh sh deployRedis.sh docker run --privilegedtrue \ --name dev.redis --restartalways \ --network dev-net \ -v ./config/redis.conf:/etc/r…

Laravel:揭秘PHP世界中最优雅的艺术品

1. 引言 在PHP的世界里&#xff0c;框架如繁星般璀璨&#xff0c;但Laravel以其独特的魅力和优雅&#xff0c;成为了众多开发者心中的艺术品。本文将深入探讨Laravel为何能在众多PHP框架中脱颖而出&#xff0c;成为最优雅的选择。 1.1 Laravel的诞生背景 Laravel的诞生可以…

Windows Server搭建局域网NTP时间服务器与客户端通实现

1.服务器环境&#xff1a; win11更改注册表 winR输入regedit win11更改注册表 winR输入regedit 2.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config&#xff0c;找到Config目录&#xff0c;双击Config目录下的AnnounceFlags&#xff0c;设为5。 3.HKEY_L…