給定乙個n x m的01矩陣,其中1表示陸地,0表示水域。對於每乙個位置,求出它距離最近的水域的距離是多少。
矩陣中每個位置與它上下左右相鄰的格仔距離為1。
第一行包含兩個整數,n和m。
以下n行每行m個0或者1,代表地圖。
資料保證至少有1塊水域。
對於30%的資料,1 <= n, m <= 100
對於100%的資料,1 <= n, m <= 800
輸出n行,每行m個空格分隔的整數。每個整數表示該位置距離最近的水域的距離。
樣例輸入
4 4樣例輸出0110
1111
1111
0110
0 1 1 0時間限制:10000ms1 2 2 1
1 2 2 1
0 1 1 0
單點時限:1000ms
記憶體限制:256mb
題目解析
本題給出n m之後給出乙個n * m的水陸分布圖0代表水1代表路,要求輸出每個點距離其最近的水的距離所組成的距離矩陣。
本題使用bfs獲取每個點到0點的最近距離,但如果暴力所有點的話是要超時的,結合bfs的特性,bfs每次入隊的都是上乙個點可以一步抵達的點,那麼我們初始將所有的0點入隊,以這些0點像周圍搜尋,記錄每個點的最短入隊層次即可。
ac**
1 #include 2using
namespace
std;
3const
int max = 810;4
struct
nodenode;
8int g[max][max]; //
記錄給出的圖
9int
n, m;
10bool vis[max][max]; //
bool判斷每個點是否已經走過
11int ans[max][max]; //
記錄每個點距離水的最近距離
12//
上下左右四個方向
13int x[4] = ;
14int y[4] = ;
15bool judge(int x, int y)
22 queueq;
23void
bfs()38}
39}40}
41int
main()
4250}51
for(int i = 0; i < n; i++)60}
61}62 bfs(); //
搜尋獲得答案
63for(int i = 0; i < n; i++)
69 printf("\n"
);70}71
return0;
72 }
水陸距離 HihoCoder 1478
給定乙個n x m的01矩陣,其中1表示陸地,0表示水域。對於每乙個位置,求出它距離最近的水域的距離是多少。矩陣中每個位置與它上下左右相鄰的格仔距離為1。input 第一行包含兩個整數,n和m。以下n行每行m個0或者1,代表地圖。資料保證至少有1塊水域。對於30 的資料,1 n,m 100 對於10...
Q 水陸距離 HihoCoder 1478
給定乙個n x m的01矩陣,其中1表示陸地,0表示水域。對於每乙個位置,求出它距離最近的水域的距離是多少。矩陣中每個位置與它上下左右相鄰的格仔距離為1。input 第一行包含兩個整數,n和m。以下n行每行m個0或者1,代表地圖。資料保證至少有1塊水域。對於30 的資料,1 n,m 100 對於10...
中南大學複試上機 水陸距離
題目描述 給定乙個n x m的01矩陣,其中1表示陸地,0表示水域。對於每乙個位置,求出它距離最近的水域的距離是多少。矩陣中每個位置與它上下左右相鄰的格仔距離為1。輸入多組資料。第一行包含兩個整數,n和m。以下n行每行m個0或者1,代表地圖。資料保證至少有1塊水域。對於30 的資料,1 n,m 10...