Q 水陸距離 HihoCoder 1478

2021-09-14 06:35:11 字數 1178 閱讀 4457

給定乙個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 4  

0110

1111

1111

0110

sample output

0 1 1 0  

1 2 2 1

1 2 2 1

0 1 1 0

列印每乙個1與離他最近的0的步數,只能上下左右行走,很明顯是bfs

但是一開始我是遇到乙個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...