藍橋杯 全球變暖 (DFS)

2022-05-02 20:42:09 字數 1545 閱讀 4135

你有一張某海域nxn畫素的**,"

."表示海洋、"#"

表示陸地,如下所示:

.......

.##....

.##....

....##.

..####.

...###.

.......其中"

上下左右

"四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。

由於全球變暖導致了海面上公升,科學家**未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰(上下左右四個相鄰畫素中有海洋),它就會被淹沒。

例如上圖中的海域未來會變成如下樣子:

.......

.......

.......

.......

....#..

.......

.......

請你計算:依照科學家的**,**中有多少島嶼會被完全淹沒。輸入格式第一行包含乙個整數n。 (

1<= n <= 1000

) 以下n行n列代表一張海域**。

**保證第1行、第1列、第n行、第n列的畫素都是海洋。輸出格式乙個整數表示答案

輸入樣例7

.......

.##....

.##....

....##.

..####.

...###.

.......輸出樣例1

我拿到這題肯定知道是搜尋,但是題目的意思讓我匪夷所思,後來慢慢才懂題目的意思。懂了之後,和大多數人的想法一樣,兩遍dfs搜尋找遍全球變暖前後的島嶼數然後相減就是最後的答案。

有篇博主的答案給的**讓我覺得他的想法挺驚豔的,既然求**中有多少島嶼會被完全淹沒,那麼只需要找出那些在搜尋過程中島嶼上的土地周圍都存在海水的島嶼就好了,至於其他有那種四周都有土地的島嶼,它最後只剩一塊土地也好,它分成2,3個島嶼也罷,我都不需要去管

另外,那個源**有挺多問題的,我改了一下,開始沒注意到邊界問題,程式直接崩了

#include#include

#include

#include

using

namespace

std;

intn;

char map[110][110

];int ans[11000

];int vis[110][110

];void dfs(int x, int y, int

k)int

main()}}

int sum=0

;

for(int i = 0; i < cnt; i++)

if(ans[i]==0

) sum++;

printf(

"%d\n

",sum);

return0;

}

參考自:

藍橋杯 全球變暖 dfs

你有一張某海域nxn畫素的 表示海洋 表示陸地,如下所示 其中 上下左右 四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。由於全球變暖導致了海面上公升,科學家 未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰 上下左右四個相鄰畫素中有海洋 它就會被淹...

2018藍橋杯 全球變暖(dfs)

你有一張某海域nxn畫素的 表示海洋 表示陸地,如下所示 其中 上下左右 四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。由於全球變暖導致了海面上公升,科學家 未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰 上下左右四個相鄰畫素中有海洋 它就會被淹...

藍橋杯 2018初賽 全球變暖 dfs

傳送門 你有一張某海域nxn畫素的 表示海洋 表示陸地,如下所示 其中 上下左右 四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。由於全球變暖導致了海面上公升,科學家 未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰 上下左右四個相鄰畫素中有海洋 它...