当前位置:网站首页>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;
}
边栏推荐
- Idea problem record
- [algorithm] sword finger offer2 golang interview question 8: the shortest subarray with a sum greater than or equal to K
- InnoDB dirty page refresh mechanism checkpoint in MySQL
- 平衡二叉树详解 通俗易懂
- Matlab读取GNSS 观测值o文件代码示例
- 编辑距离(多源BFS)
- Naive Bayesian theory derivation
- MySQL performance tuning - dirty page refresh
- Knowledge system of digital IT practitioners | software development methods -- agile
- 使用rtknavi进行RT-PPP测试
猜你喜欢

Combination of fairygui check box and progress bar

idea中好用的快捷键

Fairygui character status Popup

341. Flatten nested list iterator

FairyGUI增益BUFF数值改变的显示

Compilation principle: preprocessing of source program and design and implementation of lexical analysis program (including code)
![[algorithme] swordfinger offer2 golang question d'entrevue 2: addition binaire](/img/c2/6f6c3bd4d70252ba73addad6a3a9c1.png)
[algorithme] swordfinger offer2 golang question d'entrevue 2: addition binaire

rtklib单点定位spp使用抗差估计遇到的问题及解决
![[算法] 劍指offer2 golang 面試題2:二進制加法](/img/c2/6f6c3bd4d70252ba73addad6a3a9c1.png)
[算法] 劍指offer2 golang 面試題2:二進制加法

There is no red exclamation mark after SVN update
随机推荐
Unity3D制作注册登录界面,并实现场景跳转
Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作)
In 2020, the average salary of IT industry exceeded 170000, ranking first
How to improve the deletion speed of sequential class containers?
记录:newInstance()过时的代替方法
[algorithm] sword finger offer2 golang interview question 8: the shortest subarray with a sum greater than or equal to K
(the first set of course design) sub task 1-5 317 (100 points) (dijkstra: heavy edge self loop)
Easy to use shortcut keys in idea
(课设第一套)1-4 消息传递接口 (100 分)(模拟:线程)
[leetcode622] design circular queue
FairyGUI循環列錶
[算法] 剑指offer2 golang 面试题1:整数除法
Programming homework: educational administration management system (C language)
Agile development helps me
There is no red exclamation mark after SVN update
Pride-pppar source code analysis
Liste des boucles de l'interface graphique de défaillance
2022国赛Re1 baby_tree
Containers and Devops: container based Devops delivery pipeline
Compile GDAL source code with nmake (win10, vs2022)