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 ...