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