藍橋杯 18省賽 B9 全球變暖 佇列

2021-10-09 02:17:00 字數 1332 閱讀 4640

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

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

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

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

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

【輸入格式】

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

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

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

【輸出格式】

乙個整數表示答案。

【輸入樣例】7…

.##…

.##…

…##.

…####.

…###.

…【輸出樣例】

1資源約定:

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗 < 1000ms

思路:先得到海水蔓延之後沒有沉沒的陸地索引

再遍歷這些未沉沒的陸地索引,得出這些陸地索引一共組成多少個島嶼

為了使掃瞄(遍歷)的範圍盡量的小,我使用佇列作為遍歷容器

public

class 全球變暖_dfs_9

;//運算元組,遍歷四周的索引

int tmp =

0,index =q.

size()

;//為什麼使用index變數:這使得我後面可以繼續往佇列新增元素,卻不影響我退出迴圈的判斷

while

(true)if

(!isocc) q.

add(tmp)

;//四周均是地面

}int ans =0;

while

(true

) a[tmp]

='+'

;//遍歷地面之後,使其標記if(

!isflag) ans ++;}

system.out.

println

(ans);}

private

static

void

init()

} sc.

close();}}

2018藍橋杯省賽B組 9 全球變暖

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

全球變暖 藍橋杯2018省賽

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

18 藍橋杯 全球變暖

圖中 聯通分量有幾個,每個聯通分量包含幾個 與.相連的有幾個 座標 1.x,y座標 2.種類資訊 3.是否訪問 4.屬於哪個聯通分量 includeusing namespace std int n string s 10000 圖形輸入 int mark 1000 1000 標記屬於哪乙個連通分量...