烤樂滋逃亡

2021-10-23 19:30:05 字數 1880 閱讀 4026

題目描述

烤樂滋是個調皮的小男孩,他不需要給大家留下深刻的印象,於是自暴自棄,把圖漾中學教室的玻璃砸碎了。 圖漾中學的教導處主任抓起一把戒尺就衝了過去,烤樂滋不得不逃向學校的小樹林。

學校的小樹林由於疏於管理,並不太茂密,供烤樂滋隱蔽的大樹也比較少。烤樂滋知道,他離最近的一棵樹的 距離越近,他有越大的概率躲過教導主任的追殺。但學校的小樹林面積有點大,烤樂滋知道自己如果找出離每個位 置最近的一棵樹,一定需要花很多的時間,自己的小命就不保啦。 學校的小樹林可以抽象成乙個 n m 的網格,每個 11 的格仔為乙個位置,每個位置有樹、空地、障礙三 種形態,與乙個格仔距離為 1 的格仔定義為它上下左右的四個格仔。(邊界除外),你不能走到有障礙的格仔上面。

兩個格仔之間的距離定義為兩個格仔之間不經過障礙的最短路長度,如果兩個格仔不可達,那麼我們定義它 們之間的距離為「godie」。

你要求出每個格仔的危險值。乙個非障礙格仔的危險值定義為它離所有樹的距離當中最小的那乙個距離。在求 最小值的過程中,你可以視godie 為大於一切其他距離的乙個值,如果這個格仔離所有樹的距離都為godie,那 這個格仔的危險值也將是godie。

根據上面的定義,顯然樹格仔的危險值為 0。

現在烤樂滋擁有了學校小樹林的具體地圖,他希望你告訴他每乙個位置的危險值,以方便他挑選最佳隱蔽地點。

輸入

第一行兩個數 n,m。表示學校小樹林的大小。

接下來 n 行,每行 m 個字元,描述了這個網格。

其中,「.」代表空地- 「 *」代表樹,「#」代表障礙。

保證沒有多餘空格,保證至少有一棵樹

輸出

輸出 n 行,每行 m 個成分。對於第 i 行的第 j 個成分: 如果該格仔為非障礙格仔,輸出其危險值,即最小距離或「godie」。 如果該格仔為障礙格仔,輸出"ovo"不包含引號

每個成分之間用乙個空格隔開。

*…

…#.##…

0 1 2 3 4

0 1 2 ovo 5

ovo 0 ovo 7 6

提示

對於 30% 的資料,n,m ≤ 10。

對於 70% 的資料,n,m ≤ 50。

對於 100% 的資料,n,m ≤ 1000。

#include

using

namespace std;

char a[

1500][

1500];

int ans[

1500][

1500

],vis[

1500][

1500];

int n,m;

int dx[4]

=;//移動方向

int dy[4]

=;//移動方向

struct node

;queueq;

intmain()

if(a[i]

[j]==

'#')ans[i]

[j]=-1

;if(a[i]

[j]==

'.')ans[i]

[j]=

1e9;

}while

(!q.

empty()

)}}for

(int i=

1;i<=n;i++

) cout<}}