藍橋杯第九屆省賽 全球變暖(DFS和BFS實現)

2021-10-09 09:58:41 字數 1756 閱讀 5170

你有一張某海域nxn畫素的**,".「表示海洋、」#"表示陸地,如下所示:

….##…

.##…

…##.

…####.

…###.

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

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

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

………#……

…請你計算:依照科學家的**,**中有多少島嶼會被完全淹沒。

【輸入格式】

第一行包含乙個整數n。 (1 <= n <= 1000)

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

**保證第1行、第1列、第n行、第n列的畫素都是海洋。

【輸出格式】

乙個整數表示答案。

【輸入樣例】7…

.##…

.##…

…##.

…####.

…###.

…【輸出樣例】

1這道題是經典的島嶼問題的變形,那麼這道題自然通過bfs和dfs均能實現,不過就是有一些細節的地方需要仔細處理一下——有多少島嶼會被完全淹沒。還有就是對輸入字元的處理

bfs:

#include

#include

using

namespace std;

#define n 1000

int visit[n]

[n],map[n]

[n];

int dir[4]

[2]=

;int res=0;

struct node};

queueq;

intbfs

(int x,

int y)}}

return flag>0?

1:0;

}int

numofisland

(int n)}}

intmain()

}numofisland

(n);

cout

}

dfs:

#include

using

namespace std;

const

int n=

1000

;int map[n]

[n];

int visit[n]

[n];

int res=0;

intbfs

(int i,

int j)

if(map[i]

[j+1

]&& visit[i]

[j+1]==

0)if(map[i-1]

[j]&& visit[i-1]

[j]==0)

if(map[i+1]

[j]&& visit[i+1]

[j]==0)

return flag>0?

1:0;

}void

numofisland

(int n)}}

intmain()

}numofisland

(n);

cout

]

}

第九屆藍橋杯省賽(9) 全球變暖

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

全球變暖 第九屆藍橋杯省賽題目九

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

藍橋杯 第九屆c語言省賽A組 全球變暖

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