bfs 解决最短路问题

2023-11-07

前提:

边权都一样时,才能用bfs求最短路

问题:

给定一个 n×mn×m 的二维整数数组,用来表示一个迷宫,数组中只包含 00 或 11,其中 00 表示可以走的路,11 表示不可通过的墙壁。

最初,有一个人位于左上角 (1,1)(1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。

请问,该人从左上角移动至右下角 (n,m)(n,m) 处,至少需要移动多少次。

数据保证 (1,1)(1,1) 处和 (n,m)(n,m) 处的数字为 00,且一定至少存在一条通路。

输入格式

第一行包含两个整数 nn 和 mm。

接下来 nn 行,每行包含 mm 个整数(00 或 11),表示完整的二维数组迷宫。

输出格式

输出一个整数,表示从左上角移动至右下角的最少移动次数。

数据范围

1≤n,m≤1001≤n,m≤100

输入样例:

5 5
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

输出样例:

8
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=110;
int n,m;
int g[N][N],d[N][N];
typedef pair<int , int>PLL;
PLL q[N*N];

int bfs()
{
    int hh=0,tt=0;
    q[0]={0,0};
    memset(d,-1,sizeof d);
    d[0][0]=0;
    
    int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};//上,右,下,左,坐标表示
    
    while(hh<=tt)
    {
        auto t=q[hh++];
        for(int i=0;i<4;i++)
        {
            int x=t.first + dx[i],y=t.second + dy[i];
            if(x>=0 && x<n && y>=0 && y<m && g[x][y]==0 && d[x][y]==-1)//只有在第一次搜到时才是最短的
            {
                d[x][y]=d[t.first][t.second]+1;
                q[++tt]={x,y};
            }
        }
    }
    return d[n-1][m-1];
}
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>g[i][j];
        }
    }
    cout<<bfs()<<endl;
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bfs 解决最短路问题 的相关文章

随机推荐

  • 关于选择FFmpeg的“git master build”还是“release build”

    小问题 写下来备忘 之前在 使用FFmpeg合并 解密 下载m3u8文件转为mp4格式 当中 以及在 可以提高DeepFaceLab DeepFake 合成最终视频速度的方法 当中 都提到了FFmpeg 大家都在用的非常好的工具 我是从官方
  • Flutter插件开发-(进阶篇)

    一 概述 Flutter也有自己的Dart Packages仓库 插件的开发和复用能够提高开发效率 降低工程的耦合度 像网络请求 http 用户授权 permission handler 等客户端开发常用的功能模块 我们只需要引入对应插件就
  • ell服务器专用pe系统,GitHub - elltor/smpe-admin: 后端通用开发框架

    SMPE ADMIN后台管理系统 项目简介 一个基于EL ADMIN Spring Boot 2 1 0 Mybatis Plus JWT Spring Security Redis Vue的前后端分离的后台管理系统 开发文档 待完善 默认
  • 集群架构总结(Kafka、redis,zk,es)

    ZK集群 1 zk集群节点可见 通过配置文件达到节点间相互可见 2 为什么集群设置奇数个节点 1 奇数节省资源 zk容错 zk节点剩下的个数必须要大于挂掉的节点 大于n 2 整个集群才可用 5节点容错2个 6节点容错2个 2 奇数节点集群可
  • CPPUTest 单元测试框架(针对 C 单元测试的使用说明)

    CPPUTest 虽然名称上看起来是 C 的单元测试框架 其实它也是支持测试 C 代码的 本文主要介绍用CPPUTest来测试 C 代码 C 没用过 平时主要用的是C C 相关的内容都省略了 本文基于 debian v7 6 x86 64
  • 2023零基础 Python 学习路线图,转行学Python让你少走弯路~

    这是我刚开始学习python时的一套学习路线 从入门到上手 不敢说精通 哈哈 希望对大家有帮助哈 大家需要高清得python学习路线可以私信我 学习 即可获取 一 Python入门 环境搭建 变量 数据类型 二 Python运算符 条件结构
  • 小程序常见的面试题

    小程序常见的面试题 1 简单描述下微信 程序的相关 件类型 答 微信 程序项 结构主要有四个 件类型 如下 WXML 是框架设计的 套标签语 结合基础组件 事件系统 可以构建出 的结构 内部主要是微信 定义的 套组件 WXSS WeiXin
  • Linux操作系统之进程间通讯—共享内存与消息队列

    文章目录 一 共享内存 1 共享内存的原理 2 共享内存的实现 三 消息队列 1 消息队列原理 2 消息队列实现 一 共享内存 1 共享内存的原理 共享内存为多个进程之间共享和传递数据提供了一种有效的方式 共享内存是先在物理内存上申请一块空
  • 2.linux git显示分支名

    linux git显示分支名 linux git显示分支名 解决linux里面git不会显示分支名 1 在 bash profile 里面添加 display the git branch name function git branch
  • 视觉SLAM理论与实践第四节课习题

    4 矩阵微分 2 分 约 1 5 小时 在优化中经常会遇到矩阵微分的问题 例如 当 变量为向量 x 求标量函数 u x 对 x 的导数时 即 为矩阵微分 通常线性代数教材不会深 探讨此事 这往往是矩阵论的内容 我在 ppt 录下为你准备了
  • ubuntu18一直紫屏,无法进入图形界面

    ubuntu18一直紫屏 无法进入图形界面 一直紫屏的原因 解决方法 首先进入想办法进入桌面环境 第一种方法 第二种方法 然后修改一些配置文件 一直紫屏的原因 使用apt upgrade更新系统后 出现桌面卡死 很是纳闷 也重装了两次系统
  • ChatGPT研究分享:机器第一次开始理解人类世界

    0 为什么会对ChatGPT感兴趣 一开始 我对ChatGPT是没什么关注的 无非就是有更大的数据集 完成了更大规模的计算 所以能够回答更多的问题 但后来了解到几个案例 开始觉得这个事情并不简单 我先分别列举出来 具体解读在文末说明 1 C
  • ChatGPT简单介绍

    div class markdown views div
  • Git Extensions的安装与使用

    一 介绍 Git Extensions是一个工具包 旨在使Windows下的Git更直观 功能 Git的Windows资源管理器集成 功能丰富的Git用户界面 32位和64位支持 二 安装 csdn下载地址 GitExtensionhttp
  • 新唐NUC980使用记录:访问以太网(LAN8720A) & 启用SSH

    文章目录 目的 修改内核以访问以太网 制作根文件系统并启用SSH 总结 目的 这篇文章主要测试访问以太网 PHY为LAN8720A 以及启用SSH 这篇文章中内容均在下面的开发板上进行测试 新唐NUC980使用记录 自制开发板 基于NUC9
  • 为什么一定要使用二级指针,而一级为什么就不行呢??

    为什么一定要使用二级指针 而一级为什么就不行呢 不是说函数中传递指针 在函数中改变指针的值 就是在改变 实参中的数据信息嘛 额 其实吧 上边说的也对 可问题就在这块了 问题是 在建立二叉树的过程中 不是改变了形参的值 而是 改变了形参的指向
  • Docker: network nat is ambigous

    初次使用docker投入开发使用 感觉不要太爽 强烈推荐入坑docker 但docker国内相关资料偏少 无论是学习或是排查问题 都不是很方便 入门学习推荐微信公众号magiccodes的 Docker最全教程 系列文章 有兴趣可自行查找
  • Kubernetes部署redis主从集群

    目标 部署Redis leader节点 部署两个follower节点 一 部署 leader节点 redis leader yaml apiVersion v1 kind Service metadata name redis leader
  • IDEA创建Web Project图解

    截图方式全程演示如何使用IntelliJ IDEA创建一个Web Project 以及如何部署到Tomcat 如何打成war包 详细请看截图 虽然没多少文字全是截图 但该有的文字说明截图上也有 如果还有什么疑问 请加裙交流
  • bfs 解决最短路问题

    前提 边权都一样时 才能用bfs求最短路 问题 给定一个 n mn m 的二维整数数组 用来表示一个迷宫 数组中只包含 00 或 11 其中 00 表示可以走的路 11 表示不可通过的墙壁 最初 有一个人位于左上角 1 1 1 1 处 已知