HihoCoder 1478 水陸距離

2022-07-30 18:33:09 字數 1422 閱讀 7985

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

1 2 2 1

1 2 2 1

0 1 1 0

時間限制:10000ms

單點時限:1000ms

記憶體限制:256mb

題目解析

本題給出n m之後給出乙個n * m的水陸分布圖0代表水1代表路,要求輸出每個點距離其最近的水的距離所組成的距離矩陣。

本題使用bfs獲取每個點到0點的最近距離,但如果暴力所有點的話是要超時的,結合bfs的特性,bfs每次入隊的都是上乙個點可以一步抵達的點,那麼我們初始將所有的0點入隊,以這些0點像周圍搜尋,記錄每個點的最短入隊層次即可。

ac**

1 #include 2

using

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...