給定乙個n x m的01矩陣,其中1表示陸地,0表示水域。對於每乙個位置,求出它距離最近的水域的距離是多少。
矩陣中每個位置與它上下左右相鄰的格仔距離為1。
input
第一行包含兩個整數,n和m。
以下n行每行m個0或者1,代表地圖。
資料保證至少有1塊水域。
對於30%的資料,1 <= n, m <= 100
對於100%的資料,1 <= n, m <= 800
output
輸出n行,每行m個空格分隔的整數。每個整數表示該位置距離最近的水域的距離。
sample input
4 4sample output0110
1111
1111
0110
0 1 1 0列印每乙個1與離他最近的0的步數,只能上下左右行走,很明顯是bfs1 2 2 1
1 2 2 1
0 1 1 0
但是一開始我是遇到乙個0就bfs,然後一直更新,最後tle了
其實應該把0全部加到佇列裡,因為佇列的特性,每個1得到的步數一定是最少的,連更新都不用了.
比如,加入兩個0,
1 那麼bfs第乙個0,它的上下左右四個地方步數為1,將它們加入佇列
2 算第二個0,與1相同;
3 bfs1中加入的步數為1的點,將步數為2的點加入佇列(此時步數一定是最小,因為步數為1的點已經全部標記過了)
其他的就是bfs模板了
#include#include#include#include#include#includeusing namespace std;
int inf=0x3f3f3f3f;
char a[810][810]; //存圖
struct note
k;int book[810][810]; //存步數
int biao[810][810]; //標記
queueq;
void bfs(int n,int m)
; while(!q.empty())}}
return;
}int main()}}
bfs(n,m);
for(int i=0; i}
水陸距離 HihoCoder 1478
給定乙個n x m的01矩陣,其中1表示陸地,0表示水域。對於每乙個位置,求出它距離最近的水域的距離是多少。矩陣中每個位置與它上下左右相鄰的格仔距離為1。input 第一行包含兩個整數,n和m。以下n行每行m個0或者1,代表地圖。資料保證至少有1塊水域。對於30 的資料,1 n,m 100 對於10...
HihoCoder 1478 水陸距離
給定乙個n x m的01矩陣,其中1表示陸地,0表示水域。對於每乙個位置,求出它距離最近的水域的距離是多少。矩陣中每個位置與它上下左右相鄰的格仔距離為1。第一行包含兩個整數,n和m。以下n行每行m個0或者1,代表地圖。資料保證至少有1塊水域。對於30 的資料,1 n,m 100 對於100 的資料,...
中南大學複試上機 水陸距離
題目描述 給定乙個n x m的01矩陣,其中1表示陸地,0表示水域。對於每乙個位置,求出它距離最近的水域的距離是多少。矩陣中每個位置與它上下左右相鄰的格仔距離為1。輸入多組資料。第一行包含兩個整數,n和m。以下n行每行m個0或者1,代表地圖。資料保證至少有1塊水域。對於30 的資料,1 n,m 10...