2501 矩阵距离 (bfs)
描述
给定一个N行M列的01矩阵 A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为:
dist(A[i][j],A[k][l])=|i-k|+|j-l|
输出一个N行M列的整数矩阵B,其中:
B[i][j]=min(1≤x≤N,1≤y≤M,A[x][y]=1){dist(A[i][j],A[x][y])}
即求与每个位置曼哈顿距离最近的1
N,M≤1000。
输入格式
第一行两个整数n,m。
接下来一个N行M列的01矩阵,数字之间没有空格。
输出格式
一个N行M列的矩阵B,相邻两个整数之间用一个空格隔开。
样例输入
3 4
0001
0011
0110
样例输出
3 2 1 0
2 1 0 0
1 0 0 1 思路:直接对每个1的起点bfs,搜过的点就不用搜了,每个第一次遍历的点,就是其中一个起点到其的最小曼哈顿距离
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
vector<P>v;
int r,c;
char maps[][];
int vis[][];
int way[][] = {,,-,,,,,-};
struct Node
{
int x,y;
};
int num;
void init()
{
scanf("%d%d",&r,&c);
char s[];
for(int i=;i<=r;i++)
{
scanf("%s",s);
for(int j=;j<=c;j++)
{
maps[i][j] = s[j-];
if(maps[i][j] == '')
{
num++;
v.push_back(P(i,j));
vis[i][j] = ;
}
}
}
} void bfs()
{
queue<P>que;
while(!que.empty())que.pop();
for(int i=;i<v.size();i++)que.push(v[i]);
while(!que.empty())
{
P tmp = que.front();
que.pop();
for(int i=;i<;i++)
{
int xx = tmp.first + way[i][];
int yy = tmp.second + way[i][];
if(xx >= && xx <= r && yy >= && yy <= c && !vis[xx][yy])
{
num++;
vis[xx][yy] = vis[tmp.first][tmp.second] + ;
que.push(P(xx,yy));
}
}
if(num == r * c)return;
}
} void print()
{
for(int i=;i<=r;i++)
{
for(int j=;j<=c;j++)
{
printf(j==c?"%d\n":"%d ",vis[i][j]-);
}
}
}
int main()
{
init();
bfs();
print();
}
2501 矩阵距离 (bfs)的更多相关文章
- [BZOJ2252]矩阵距离(BFS)
题意 输入矩阵m行n列(m<=500,n<=500),只含0.1,输出离每个元素距离最近的1的距离,其中距离定义为D(aij,akl)=abs(i-k)+abs(j-l). 示例: 输入: ...
- BZOJ2252: [2010Beijing wc]矩阵距离
题解: 我脑子里都是翔??? bfs一下就行了 我居然还想什么kd tree!真是too naive,,, #include<cstdio> #include<cstdlib> ...
- BZOJ 2252: [2010Beijing wc]矩阵距离
题目 2252: [2010Beijing wc]矩阵距离 Time Limit: 10 Sec Memory Limit: 256 MB Description 假设我们有矩阵,其元素值非零即1 ...
- Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
2252: [2010Beijing wc]矩阵距离 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 563 Solved: 274[Submit][ ...
- 「CH2501」 矩阵距离 解题报告
CH2501 矩阵距离 描述 给定一个N行M列的01矩阵 A,\(A[i][j]\) 与 \(A[k][l]\) 之间的曼哈顿距离定义为: \(dist(A[i][j],A[k][l])=|i-k|+ ...
- AcWing:173. 矩阵距离(bfs)
给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i−k|+|j−l|dist(A[i][j],A[k][l]) ...
- acwing 173. 矩阵距离(bfs)
给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i−k|+|j−l|dist(A[i][j],A[k][l]) ...
- 【BFS】bzoj2252 [2010Beijing wc]矩阵距离
要注意一开始将所有为'1'的点入队,然后通过一次BFS去更新所有点的距离,直到无法更新为止. #include<cstdio> #include<queue> #include ...
- bzoj 2252 [ 2010 Beijing wc ] 矩阵距离 —— 多源bfs
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2252 又没能自己想出来... 一直在想如何从每个1开始广搜更新答案,再剪剪枝,什么遇到1就不 ...
随机推荐
- 神经网络之dropout层
一:引言 因为在机器学习的一些模型中,如果模型的参数太多,而训练样本又太少的话,这样训练出来的模型很容易产生过拟合现象.在训练bp网络时经常遇到的一个问题,过拟合指的是模型在训练数据上损失函数比较小, ...
- 使用open live writer客户端写博客
注:Windows Live Writer 已经停止更新,建议安装 Open Live Writer,下载地址: http://openlivewriter.org/ 使用open live writ ...
- Confluence 6 附件存储提取文本文件
当基于文本的文件上传到 Confluence(例如,Word,PowerPoint 等),这些文件中的文本是可以提取并且添加到索引中的,用户可以通过索引来搜索这些文件中的文本内容,不仅仅是搜索文件名. ...
- Confluence 6 如何备份和恢复
如何备份 有关备份你数据库使用的命令与你使用的具体数据库有关,例如针对 PostgreSQL 数据库,备份命令为 pg_dump dbname > outfile. 你应该针对你使用的数据库不同 ...
- Confluence 6 Microsoft SQL Server 设置准备
在开始前,请检查: 请查看 Supported Platforms 页面来获得 Confluence 系统支持的 SQL Server 数据库版本.你需要在安装 Confluence 之前升级你的 O ...
- (五)STL算法
.算法 1.算法通过迭代器来操作容器中的数据: 2.算法为模板函数: 二.迭代器与算法 1.根据移动能力,将迭代器分成了五类 2.使用萃取,输出各个容器中,迭代器的类别 3.其中istream, os ...
- 关于在CentOS上,绘图丢失部分中文字的问题
官方的system.drawing.common 第三方的 zkweb.system.drawing,都用的是libgdiplus 只要是自己编译libgdiplus,都会有这个问题, 问题 : 这里 ...
- JSP概述
一.JSP页面本质上时一个Servlet,然而,用JSP开发比使用Servlet更容易,主要有两个原因,首先不必编译Servlet,其次JSP页面是一个以.jsp为扩展名的文本文件,可以使用任何编辑器 ...
- Kali linux Nessus &Cracking Password
1 .Nessus漏洞网站测试(真正体会到什么是专业版和社区版的区别,要技术就不光要勤恳的态度,严谨的思维.还有矢志不渝的志气,还必须要求砸钱,所以狠狠的赚钱才是硬道理),我的半个社区版的很多扫描模块 ...
- 在vue项目中使用axios发送FormData
这个是axios的中文文档,挺详细的: https://www.kancloud.cn/luponu/axios/873153 文档中的 使用 application/x-www-form-ur ...