当前位置:网站首页>Edit distance (multi-source BFS)
Edit distance (multi-source BFS)
2022-07-06 12:56:00 【Classmate Chen_】
Title Description
Given a N That's ok M Column 01 matrix A,A[i][j] And A[k][l] The Manhattan distance between is defined as : dist(A[i][j],A[k][l])=|i−k|+|j−l| Output one N That's ok M The integer matrix of columns B, among : B[i][j]=min1≤x≤N,1≤y≤M,A[x][y]=1dist(A[i][j],A[x][y]) Input format
The first line has two integers N,M.
Next one N That's ok M Column 01 matrix , There is no space between the numbers .
Output format
One N That's ok M Columns of the matrix B, Two adjacent integers are separated by a space .
Data range
1≤N,M≤1000
sample input :
3 4
0001
0011
0110
sample output :
3 2 1 0
2 1 0 0
1 0 0 1
This topic is a multi-source BFS, Find all points to points as 1 And output the distance matrix .
We can divide everything into 1 Point of as the starting point , Then create a virtual source , The distance from the virtual source point to the starting point is 0.
If we do this, will the distance of the searched points be updated again when we search the points ?
The answer is no . Because single source BFS It has two phases
Because we search layer by layer , The point of each search must be bigger than yourself 1 The point of the layer , According to the two-phase property, we can deduce that it is monotonous .
Since it is monotonous , Then the points in front of us must be smaller than those added later , Therefore, the previously searched points will not be updated again .
In this way, we can turn the problem into a single source BFS, This question is doing single source BFS There is no need to create a real virtual source , Because the virtual source point to the starting point ( The value is 1 The point of ) The distance to 0, So when we do it, we can directly add all the starting points to the queue .
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
typedef pair<int,int> PII;
const int N=1005;
char g[N][N];
int d[N][N];
queue<PII> q;
int n,m;
void bfs(){
memset(d,-1,sizeof d);
int dx[]={
0,1,0,-1},dy[]={
1,0,-1,0};
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(g[i][j]=='1'){
// Find source point
d[i][j]=0;
q.push({
i,j});
}
}
}
while(q.size()){
PII t=q.front();
q.pop();
for(int i=0;i<4;i++){
// Search for
int a=t.first+dx[i],b=t.second+dy[i];
if(a<0 || a>=n || b<0 || b>=m) continue; // Is it across the border?
if(d[a][b]!=-1) continue; // Have you walked
q.push({
a,b});
d[a][b]=d[t.first][t.second]+1;
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>g[i][j];
}
}
bfs();
// Output distance matrix
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d ",d[i][j]);
}
puts("");
}
return 0;
}
边栏推荐
- Agile development helps me
- Meanings and differences of PV, UV, IP, VV, CV
- GPS高程拟合抗差中误差的求取代码实现
- [algorithm] sword finger offer2 golang interview question 13: sum of numbers of two-dimensional submatrix
- [算法] 剑指offer2 golang 面试题2:二进制加法
- rtklib单点定位spp使用抗差估计遇到的问题及解决
- SVN更新后不出现红色感叹号
- [algorithm] sword finger offer2 golang interview question 3: the number of 1 in the binary form of the first n numbers
- How to reduce the shutdown time of InnoDB database?
- 记录:Navicat Premium初次无法连接数据库MySQL之解决
猜你喜欢
[Chongqing Guangdong education] Shandong University College Physics reference materials
Fabrication d'un sac à dos simple fairygui
Problems and solutions of robust estimation in rtklib single point location spp
Compilation principle: preprocessing of source program and design and implementation of lexical analysis program (including code)
Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作)
Design and implementation of general interface open platform - (39) simple and crude implementation of API services
微信小程序开发心得
[算法] 劍指offer2 golang 面試題2:二進制加法
Lock wait timeout exceeded try restarting transaction
[算法] 剑指offer2 golang 面试题5:单词长度的最大乘积
随机推荐
Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作)
Unity3D,阿里云服务器,平台配置
In 2020, the average salary of IT industry exceeded 170000, ranking first
记录:newInstance()过时的代替方法
What are the functions and features of helm or terrain
Fabrication of fairygui simple Backpack
FairyGUI循环列表
[algorithm] sword finger offer2 golang interview question 2: binary addition
FairyGUI复选框与进度条的组合使用
Database course design: college educational administration management system (including code)
KF UD分解之UD分解基础篇【1】
Fairygui gain buff value change display
Liste des boucles de l'interface graphique de défaillance
[算法] 劍指offer2 golang 面試題2:二進制加法
微信小程序开发心得
Lean product development - Lean Software Development & lean product development
染色法判定二分图
【RTKLIB 2.4.3 b34 】版本更新简介一
FGUI工程打包发布&导入Unity&将UI显示出来的方式
Compile GDAL source code with nmake (win10, vs2022)