当前位置:网站首页>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;
}
边栏推荐
- GPS高程拟合抗差中误差的求取代码实现
- idea中好用的快捷键
- [algorithm] sword finger offer2 golang interview question 13: sum of numbers of two-dimensional submatrix
- Mysql database reports an error: row size too large (> 8126) Changing some columns to TEXT or BLOB or using ROW_ FORMAT=DY
- [算法] 剑指offer2 golang 面试题2:二进制加法
- 基本Dos命令
- 《软件测试》习题答案:第一章
- Devops' future: six trends in 2022 and beyond
- Detailed explanation of balanced binary tree is easy to understand
- [算法] 剑指offer2 golang 面试题10:和为k的子数组
猜你喜欢
The port is occupied because the service is not shut down normally
Mixed use of fairygui button dynamics
FairyGUI增益BUFF數值改變的顯示
C code implementation of robust estimation in rtklib's pntpos function (standard single point positioning spp)
FairyGUI简单背包的制作
FGUI工程打包发布&导入Unity&将UI显示出来的方式
C programming exercise
[算法] 剑指offer2 golang 面试题10:和为k的子数组
Problems and solutions of robust estimation in rtklib single point location spp
[算法] 剑指offer2 golang 面试题13:二维子矩阵的数字之和
随机推荐
[algorithme] swordfinger offer2 golang question d'entrevue 2: addition binaire
RTKLIB: demo5 b34f.1 vs b33
Mixed use of fairygui button dynamics
FairyGUI增益BUFF數值改變的顯示
编辑距离(多源BFS)
Basic DOS commands
1041 Be Unique (20 point(s))(哈希:找第一个出现一次的数)
Derivation of logistic regression theory
闇の連鎖(LCA+树上差分)
[algorithm] sword finger offer2 golang interview question 8: the shortest subarray with a sum greater than or equal to K
idea中导包方法
[algorithm] sword finger offer2 golang interview question 13: sum of numbers of two-dimensional submatrix
Meanings and differences of PV, UV, IP, VV, CV
[algorithm] sword finger offer2 golang interview question 9: subarray with product less than k
The master of double non planning left the real estate company and became a programmer with an annual salary of 25W. There are too many life choices at the age of 25
[算法] 剑指offer2 golang 面试题12:左右两边子数组的和相等
FairyGUI按钮动效的混用
【GNSS】抗差估计(稳健估计)原理及程序实现
雇佣收银员【差分约束】
记录:初次cmd启动MySQL拒接访问之解决