当前位置:网站首页>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;
}
边栏推荐
- What are the advantages of using SQL in Excel VBA
- 【RTKLIB 2.4.3 b34 】版本更新简介一
- FairyGUI复选框与进度条的组合使用
- [algorithm] sword finger offer2 golang interview question 2: binary addition
- Game 280 weekly
- Particle system for introduction to unity3d Foundation (attribute introduction + case production of flame particle system)
- [GNSS] robust estimation (robust estimation) principle and program implementation
- Fabrication d'un sac à dos simple fairygui
- Derivation of logistic regression theory
- 编辑距离(多源BFS)
猜你喜欢
染色法判定二分图
记录:初次cmd启动MySQL拒接访问之解决
Unity3d, Alibaba cloud server, platform configuration
Force buckle 1189 Maximum number of "balloons"
There is no red exclamation mark after SVN update
[algorithm] sword finger offer2 golang interview question 5: maximum product of word length
平衡二叉树详解 通俗易懂
【干货】提升RTK模糊度固定率的建议之周跳探测
MySQL shutdown is slow
FairyGUI循環列錶
随机推荐
基本Dos命令
平衡二叉树详解 通俗易懂
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
PRIDE-PPPAR源码解析
Detailed explanation of balanced binary tree is easy to understand
Acwing-116 pilot brother
Teach you to release a DeNO module hand in hand
Lock wait timeout exceeded try restarting transaction
Unity3D,阿里云服务器,平台配置
Unity3D制作注册登录界面,并实现场景跳转
[dry goods] cycle slip detection of suggestions to improve the fixed rate of RTK ambiguity
[algorithm] sword finger offer2 golang interview question 4: numbers that appear only once
错误: 找不到符号
Devops' future: six trends in 2022 and beyond
记录:动态Web项目servlet访问数据库404错误之解决
染色法判定二分图
Solution to the problem of automatic login in Yanshan University Campus Network
Liste des boucles de l'interface graphique de défaillance
isEmpty 和 isBlank 的用法区别
[algorithm] sword finger offer2 golang interview question 3: the number of 1 in the binary form of the first n numbers