AcWing 3083矩阵距离

给定一个 n×m的 01 矩阵:

复制代码
a11 a12 ... a1m
...
an1 an2 ... anm

定义 aij��� 与 akl��� 之间的距离为 D(aij,akl)=|i−k|+|j−l|�(���,���)=|�−�|+|�−�|。

对于每个元素 aij���,请求出与它距离最近且值为 11 的元素 akl��� 和它的距离是多少。

另外注意,当元素 aij��� 本身就为 11 时,与它距离最近且值为 11 的元素就是它自己,距离为 00。

输入格式

第一行为两个整数,分别代表 n� 和 m�。

接下来的 n� 行,第 i� 行的第 j� 个字符代表 aij���。

输出格式

共 n� 行,第 i� 行的第 j� 个数字表示 aij��� 与其距离最近且值为 11 的元素的距离。

数据范围

1≤n,m≤10001≤�,�≤1000

输入样例:
复制代码
3 4
0001
0011
0110
输出样例:
复制代码
3 2 1 0
2 1 0 0
1 0 0 1

|------------------------------------------------------------------------------------------------------------------------------------------|
| 难度:简单 |
| 时/空限制:1s / 64MB |
| 总通过数:114 |
| 总尝试数:197 |
| 来源: BJWC2010 |

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
#include<queue>

using namespace std;

int n,m;
string temp;
vector<string>a;
int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
bool used[1002][1002];
int dis[1002][1002];

struct node{
	int x;
	int y;
};

queue<node>q;

int bfs()
{
	node start,next;
	while(!q.empty())
	{
		start=q.front();
		q.pop();
		for(int i=0;i<4;++i)
		{
			next.x=start.x+dir[i][0];
			next.y=start.y+dir[i][1];
			if((next.x<n&&next.x>=0)&&(next.y<m&&next.y>=0)&&(used[next.x][next.y]==false))
			{
				used[next.x][next.y]=true;
				dis[next.x][next.y]=dis[start.x][start.y]+1;
				q.push(next);
			}
		}
	}
}

void sol()
{
	cin>>n>>m;
	for(int i=0;i<n;++i)
	{
		cin>>temp;
		for(int j=0;j<m;++j)
		{
			if(temp[j]=='1'){
				q.push({i,j});
				used[i][j]=true;
			}
		}
		a.push_back(temp);
	}
	bfs();
	for(int i=0;i<n;++i)
	{
		for(int j=0;j<m;++j)
		{
			cout<<dis[i][j]<<' ';
		}
		cout<<endl;
	}

}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	sol();
}
相关推荐
围巾哥萧尘11 分钟前
「原型设计」Trae AI & DeepSeek-Chat-V3 在微信小程序「倒计时」原型中的复现🧣
算法·ios·架构
Awesome Baron11 分钟前
LeetCode hot 100 每日一题(16)——240. 搜索二维矩阵 II
java·leetcode·矩阵
高山莫衣15 分钟前
【差分隐私相关概念】约束下的矩阵机制
线性代数·算法·矩阵
十五年专注C++开发19 分钟前
双指针技巧在C++中的应用:从基础到进阶
开发语言·数据结构·c++
aimmon33 分钟前
Rust从入门到精通之精通篇:24.高级异步编程
开发语言·算法·rust
小学仔1 小时前
### Java二维字符矩阵输入解析:正确读取由0和1组成的矩阵
java·算法·leetcode·矩阵·动态规划
菜鸟00881 小时前
蓝桥杯 第十天 2019国赛第4题 矩阵计数
算法·职场和发展·蓝桥杯
LinkerLin1 小时前
因果推理的智慧:当大模型遇见因果图谱
算法
小华同学ai1 小时前
17.1K star!两小时就能训练出专属于自己的个性化小模型,这个开源项目让AI触手可及!
算法·程序员·github
王RuaRua1 小时前
[数据结构]1.时间复杂度和空间复杂度
c语言·数据结构·算法