多源BFS之矩阵距离

news/2024/9/18 13:27:09/ 标签: 宽度优先, 矩阵, 算法, 多源bfs

多源BFS

173. 矩阵距离

给定一个 N行 M列的 01矩阵 A,A[i][j]与 A[k][l]之间的曼哈顿距离定义为dist(i,j,k,l)=|i−k|+|j−l|
输出一个 N行 M列的整数矩阵 B,其中: B[i][j]=min1≤x≤N,1≤y≤M,A[x][y]=1dist(i,j,x,y)

输入格式
第一行两个整数 N,M。
接下来一个 N行 M列的 01矩阵,数字之间没有空格。

输出格式
一个 N行 M列的矩阵 B,相邻两个整数之间用一个空格隔开。

数据范围
1≤N,M≤1000
输入样例:
3 4
0001
0011
0110
输出样例:
3 2 1 0
2 1 0 0
1 0 0 1
思路
全部位置为1的地方设置成dist=0,全部入队依次扩展。

#include<iostream>
#include<cstring>
#include<algorithm>#define x first
#define y secondusing namespace std;typedef pair<int,int> pii;
const int N = 1010, M = N*N;int n,m;
char g[N][N];
pii q[M];
int dist[N][N];void bfs(){memset(dist,-1,sizeof dist);int hh=0,tt=-1;//插个锚点,后面的操作中先加tt后赋值,少了tt=0,这个操作for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(g[i][j]=='1'){dist[i][j]=0;q[++tt]={i,j};}}}int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};while(hh<=tt){pii t=q[hh++];for(int i=0;i<4;i++){int a=t.x+dx[i],b=t.y+dy[i];if(a<0||a>=n||b<0||b>=m) continue;if(dist[a][b]!=-1) continue;dist[a][b]=dist[t.x][t.y]+1;q[++tt]={a,b};}}}int main(){scanf("%d%d",&n,&m);for(int i=0;i<n;i++) scanf("%s",g[i]);bfs();for(int i=0;i<n;i++){for(int j=0;j<m;j++)printf("%d ",dist[i][j]);printf("\n");}return 0;
}

http://www.ppmy.cn/news/1524295.html

相关文章

状压DP

状压DP 对于数据范围n<20的可以考虑状压DP 1.蒙德里安的梦想 题目描述 求把 N M NM NM 的棋盘分割成若干个 12 的的长方形&#xff0c;有多少种方案。 例如当$ N2&#xff0c;M4$ 时&#xff0c;共有 5 种方案。当 N 2 &#xff0c; M 3 N2&#xff0c;M3 N2&…

echarts 显示中国地图以及省份

这里使用echarts 4.9的版本显示中国地图&#xff0c;因为5.X的版本已经把地图模块分离出去了 可以从这里下载全国地图数据或各身份的数据 https://github.com/apache/echarts/tree/master/test/data/map 完整代码示例&#xff1a;中国地图 <!DOCTYPE html> <html&g…

全国各地身份证号开头6位数字及地区对照表

具体请前往&#xff1a;全国各地身份证号开头6位数字-省市县/区对照表

设计模式】Listener模式和Visitor模式的区别

文章目录 前言一、介绍Listener模式Visitor模式 二、代码实现2.1 Listener模式的Java实现2.2Listener模式的Go实现2.3Visitor模式的Java实现2.4Visitor模式的Go实现 三、总结 前言 在软件设计中&#xff0c;设计模式是解决特定问题的通用解决方案。Listener模式和Visitor模式是…

STL-stack/queue/deque(容器适配器)

目录 ​编辑 STL-stack 150. 逆波兰表达式求值 stack queue std::stack deque 性能测试 结构 STL-stack 栈的压入、弹出序列_牛客题霸_牛客网输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否可能为该栈的弹出顺序。假。题目…

信息安全国内外现状及技术要求示例(R155/R156)

国际政策、 法规的现状与趋势 鉴于对交通安全、社会安全甚至国家安全的重要影响&#xff0c;汽车网络安全、数据安全得到各相关国家和地区的高度重视&#xff0c;纷纷出台相关法规、标准。 信息安全法规 R155 法规适用范围覆盖了乘用车及商用车&#xff0c;适用于 M 类、N 类…

原生 input 中的 “type=file“ 上传文件

目标&#xff1a;实现文件上传功能 原型图&#xff1a; HTML部分&#xff1a; <div class"invoice-item"><div class"invoice-title">增值税专用发票</div><div class"invoice-box"><el-form-item label"标准…

C语言数组指针--自学笔记

一维数组指针 int a[3] {1,2,3}; int *pa a; //pa是一个整形的指针&#xff0c;pa 指针跨一个int大小的地址 int (*paa)[3] a; //paa是一个数组行指针, paa指针跨一行&#xff0c;3个int大小的地址 //a[n] *(pan) 二维数组指针 int b[2…

【H2O2|全栈】关于CSS(2)CSS基础(二)

目录 CSS基础知识 前言 准备工作 选择器的组合 盒模型 示例网页代码 后代选择器 亲代选择器 相邻兄弟选择器 后续兄弟选择器 多个元素选择器 通配符选择器 优先级 其他应用 伪类 锚链接的属性 列表的属性 list-style-type list-style-position list-style…

coding云原生构建实现自动化部署(前端代码v3+vite)

使用Coding CI/CD 在现代软件开发中&#xff0c;自动化部署是提高效率和降低出错率的关键步骤。本文将详细介绍如何使用 coding-ci.yml 文件配置 CI/CD 流程&#xff0c;实现一个自动化的部署过程。我们将以一个简单的项目为例&#xff0c;讲解如何利用 Coding CI/CD 工具自动…

EMQX 学习一二:认证和授权、主题重写、webhook

建议: 有问题找 官方文档 官方文档 官方AI EMQX : MQTT broker 安装: 启动: * cd 到 安装目录的bin目录下 * ./emqx start (守护进程启动)[root@localhost bin]# ./emqx start WARNING: Default (insecure) Erlang cookie is in use. WARNING: Configure node.cookie i…

Spring源码解读:解决循环依赖的三种方式

Spring源码解读&#xff1a;解决循环依赖的三种方式 目录 Spring源码解读&#xff1a;解决循环依赖的三种方式 一、循环依赖的定义与问题 1. 循环依赖的概念 2. 循环依赖带来的问题 二、Spring解决循环依赖的三种方式 1. 构造器注入的方式 2. Setter注入的方式 3. 使用Lazy注解…

golang学习笔记10——golang 的 Gin 框架,快速构建高效 Web 应用

推荐学习文档 golang应用级os框架&#xff0c;欢迎star基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学…

计算机视觉中,Pooling的作用

在计算机视觉中&#xff0c;Pooling&#xff08;池化&#xff09;是一种常见的操作&#xff0c;主要用于卷积神经网络&#xff08;CNN&#xff09;中。它通过对特征图进行下采样&#xff0c;减少数据的空间维度&#xff0c;同时保留重要的特征信息。Pooling 的作用可以归纳为以…

免费云服务器申请教程

免费云服务器的申请流程通常包括以下几个步骤&#xff0c;但请注意&#xff0c;不同云服务提供商的具体步骤可能略有不同。以下是一个通用的申请流程&#xff1a; 一、选择合适的云服务提供商 首先&#xff0c;需要选择一家提供免费云服务器服务的云服务提供商。 免费云服务器汇…

R语言论文插图模板第9期—滑珠散点图

在之前的文章中&#xff0c;分享了R语言分组散点图的绘制模板&#xff1a; 特征渲染的散点图的绘制方法: 进一步&#xff0c;再来分享一下滑珠散点图的绘制方法。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋…

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1&#xff08;高级消息队列协议&#xff09;是一种网络协议&#xff0c;它允许遵从该协议的客户端&#xff08;Publisher或者Consumer&#xff09;应用程序与遵从该协议的消息中间件代理&#xff08;Broker&#xff0c;如RabbitMQ&#xff09;…

MonoHuman: Animatable Human Neural Field from Monocular Video 翻译

MonoHuman&#xff1a;来自单目视频的可动画人类神经场 摘要。利用自由视图控制来动画化虚拟化身对于诸如虚拟现实和数字娱乐之类的各种应用来说是至关重要的。已有的研究试图利用神经辐射场&#xff08;NeRF&#xff09;的表征能力从单目视频中重建人体。最近的工作提出将变形…

C语言关键字之Static

在一些.C文件中&#xff0c;总能看到static的字样&#xff0c;static作为关键字在 C 和 C 中具有重要的作用。它提供了多种使用方式&#xff0c;帮助程序员控制变量和函数的作用域和生命周期。以下是详细介绍。 1. 静态变量 1.1 在函数内部的静态变量 当一个变量被声明为“st…

16. MyBatis的延迟加载机制是什么?如何配置?有哪些优缺点?

延迟加载&#xff08;Lazy Loading&#xff09;是MyBatis提供的一种机制&#xff0c;用于优化数据库查询性能。在启用延迟加载时&#xff0c;某些关联对象或集合只有在被实际访问时才会触发数据库查询&#xff0c;而不是在主对象加载时立即加载。这种机制可以减少不必要的数据库…