水陸距離 廣搜結構體佇列

2021-08-18 15:19:27 字數 1346 閱讀 2458

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

再分析:還是從0出發.可以發現這個值是從零周圍擴散出去的.那麼不難發現,這其實就是個bfs.

不錯,是個bfs,從0的四個方向出發,然後再從擴充套件的四個方向出發,每次擴充套件,距離都+1.

思路:邊輸入邊記錄0的位置,然後對其初始化,存入佇列.

接著,就是經典while迴圈從0擴散四個方向走佇列了.

說的不太好,詳情看**注釋.

**:#include#include#include#include#include#include#define m 805

using namespace std;

struct node

;struct node p;

string mm[m];

queueq;

int n,m,vis[m][m],ans[m][m],ne[4][2]=;

int main()

{ cin>>n>>m;

for(int i=0;i>mm[i];//這裡要注意一下樣例輸入點中間沒空格...

for(int j=0;j=0&&xx=0&&yyps:wawawa2023年4月12日 11:04:23 

暴力死t,廣搜不會.花了一天來學用佇列和廣搜.   

原來看過啊哈演算法講的廣搜,現在覺得裡面太基礎太詳細,所有的標準模版庫里的容器函式都是用陣列來模擬的. 

雖然給人講的很詳細,但也只適合學基礎,實用的話到不可能再用陣列來模擬了.

這裡推薦一本書《演算法筆記》

個人覺得實用,雖然沒有《啊哈演算法》寫的那麼生動形象,也沒有那麼基礎,但是講的真的很實用,

怎麼說呢,比較綜合吧.適合有基礎的看.

(滑稽臉)會有人看這個部落格嘛..還推薦書...搞笑了...

因為渴望知識而學習,非名利.

水陸距離 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...