海島淹沒(DFS)

2021-09-12 07:30:47 字數 2129 閱讀 5587

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

……..##….

.##….

….##.

…####.

…###.

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

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

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

…….…….

…….…….

….#…

…….…….

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

【輸入格式】

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

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

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

【輸出格式】

乙個整數表示答案。

【輸入樣例】

7…….

.##….

.##….

….##.

…####.

…###.

…….【輸出樣例】

1【輸入樣例】10…

.###…###.

.###…###.

.########.

….###…#…

.#.#…#…

.###………

【輸出樣例】

2資源約定:

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

cpu消耗 < 1000ms

運用dfs先求出原先的海島數量sum1,然後找出四周都有#的#的島嶼,求出其數量sum2。

用原始島嶼數減去得到sum=sum1-sum2。

具體**如下:

#include#includeusing namespace std;

#include//這個思路就是求哪個島嶼有四周都是#的#,然後剩下的島嶼就是被淹沒的數量(完全被浸染的數量)

char map[101][101];

char map1[101][101];

int move[4][2]=;

int ans[110]=;

int vis[101][101]=; //未被訪問標記為0

void dfs(int x,int y,int n) //求總的島嶼數

;int aa[5]; //儲存五個數

int vis[5]=; //標記

int move[4]=; //上下左右四個方向

/* 1 2 3 4

6 7 8 9

11 12 13 14

*///因為4+1 9+1不能連上

**如下:

//方格分割(分成完全一樣的兩部分)問有多少中分法

#include#include#includeusing namespace std;

int str[8][8];

int move[4][2]=,,,};//上下左右四個方向

int sum=0;

int vis[8][8]=;

void dfs(int r,int c) //以(r,c)為起點開始回溯

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

} }int main()

20190716 被水題淹沒

上午7點到8點和午後一小時,是烹製oier的最好時刻。因為這時oier放鬆而疲憊,肉質鬆軟,適合烤製。用上等香料醃製,果木炭烤,佐以孜然 辣椒,色澤金黃,外酥裡嫩的蒟蒻,成為當地招待來賓,歡慶佳節的首選。完戲,考試炸了,話說這考試頻繁的要命。後來 考完 我才發現,這不是模擬題,而是 noip2016...

HNACM 七 B 海島爭霸

神秘的海洋,驚險的探險之路,打撈海底寶藏,激烈的海戰,海盜劫富等等。加勒比海盜,你知道吧?傑克船長駕駛著自己的的戰船黑珍珠1號要征服各個海島的海盜,最後成為海盜王。這是乙個由海洋 島嶼和海盜組成的危險世界。傑克船長準備從自己所占領的島嶼a開始征程,逐個去占領每乙個島嶼。面對危險重重的海洋與詭譎的對手...

8 22 問題 B 海島爭霸

神秘的海洋,驚險的探險之路,打撈海底寶藏,激烈的海戰,海盜劫富等等。加勒比海盜,你知道吧?傑克船長駕駛著自己的的戰船黑珍珠1號要征服各個海島的海盜,最後成為海盜王。這是乙個由海洋 島嶼和海盜組成的危險世界。傑克船長準備從自己所占領的島嶼a開始征程,逐個去占領每乙個島嶼。面對危險重重的海洋與詭譎的對手...