AcWing 173 矩陣距離 多源bfs模板

2021-10-21 01:19:38 字數 1640 閱讀 2385

acwing 173. 矩陣距離

給定乙個n行m列的01矩陣a,a[i][j] 與 a[k][l] 之間的曼哈頓距離定義為:

d is

t(a[

i][j

],a[

k][l

])=∣

i−k∣

+∣j−

l∣

dist(a[i][j],a[k][l])=|i−k|+|j−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]=

1dis

t(a[

i][j

],a[

x][y

])

b[i][j]=min1≤x≤n,1≤y≤m,a[x][y]=1dist(a[i][j],a[x][y])

b[i][j

]=mi

n1≤x

≤n,1

≤y≤m

,a[x

][y]

=1di

st(a

[i][

j],a

[x][

y])輸入格式

第一行兩個整數n,m。

接下來乙個n行m列的01矩陣,數字之間沒有空格。

輸出格式

乙個n行m列的矩陣b,相鄰兩個整數之間用乙個空格隔開。

資料範圍

1≤n,m≤1000

輸入樣例:

3 4

0001

0011

0110

輸出樣例:

3 2 1 0

2 1 0 0

1 0 0 1

這道題是多源bfs。

y總的理解我有點不是很明白。

我的理解是,以目標點為中心,然後掃瞄過里中心點的距離就是最短路程。

那我們就按bfs的模板,把每乙個中心點插進去,然後bfs,因為bfs佇列的特殊性質,所以每個目標點都以此為中心,每次遍歷乙個中心點擴散,然後迴圈擴散。

**如下

#include#include#include#include#define x first

#define y second

using namespace std;

typedef pairpii;

const int n=1010;

int dist[n][n];

bool st[n][n];

int n,m;

queueq;

void bfs()

,dy=

; while(q.size()));

}}}}

int main(void));

st[i][j]=true;}}

bfs();

for(int i=1;i<=n;i++)

}

AcWing 173 矩陣距離

題目描述 給定乙個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 min1 x n,1 y m,a x y 1dist a i j a x y 輸入格式 第一行兩個整數n,m。...

AcWing 173 矩陣距離(bfs)

給定乙個n行m列的01矩陣a,a i j 與 a k l 之間的曼哈頓距離定義為 di st a i j a k l i k j l dist a i j a k l i k j l dist a i j a k l i k j l 輸出乙個n行m列的整數矩陣b,其中 b i j mi n1 x n...

矩陣距離 多源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 i k j l 輸出乙個n行m列的整數矩陣b,其中 b i j min1 x n,1 y m,a x y 1dist a i j a ...