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

2021-08-30 15:34:27 字數 2261 閱讀 1376

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

.......

.##....

.##....

....##.

..####.

...###.

.......

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

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

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

.......

.......

.......

.......

....#..

.......

.......

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

【輸入格式】

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

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

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

【輸出格式】

乙個整數表示答案。

【輸入樣例】

7 .......

.##....

.##....

....##.

..####.

...###.

.......  

【輸出樣例】

1  資源約定:

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

cpu消耗  < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」 的多餘內容。

注意:main函式需要返回0;

只使用ansi c/ansi c++ 標準;

不要呼叫依賴於編譯環境或作業系統的特殊函式。

所有依賴的函式必須明確地在原始檔中 #include

不能通過工程設定而省略常用標頭檔案。

提交程式時,注意選擇所期望的語言型別和編譯器型別。

主要運用bfs,廣度搜尋,遍歷兩次。第一次遍歷,給周圍有水域的座標點,標記訪問矩陣vis[i][j],該點值為2。

再從頭遍歷vis[i][j],使圖map[i][j]對應的vis[i][j]=2的點變為'.'(水域)。再進行第二次遍歷,這邊我看了許多部落格,我認為大部分的解法都是存在的問題,不能簡單的將兩次遍歷的數量相減,若小於0,則為0。問題出在,有的陸地可能會分成兩個陸地,若同時有乙個陸地消失,減下來的結果是沒有陸地消失,根據題意顯然是不對的,上述情況應該有乙個陸地消失。我的解法是,在第一遍遍歷的時候給節點標上序號,在第二遍遍歷前建立為序號大小的陣列,其值全為1,在第二遍遍歷的時候,演算法中不再改變節點的序號值,遇到序號則把陣列中對應位置置0,最後遍歷該陣列,1的個數即為消失的陸地數

#include #include #include #include using namespace std;

struct nodenow,next,s;

char map[1005][1005];

int vis[1005][1005];

int dir[4][2] = ;

int n,sum;

bool in(int x,int y)

// 如果周圍有水,返回真

bool check(int x,int y)

return false;

}void bfs()else

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

sum++;

return ;

}// bfs2 的作用於bfs 是基本一致的,不同的在於遍歷的過程中不改變節點的num屬性

void bfs2()else

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

return ;

}int main()

memset(vis,0,sizeof(vis));

sum = 0;

for(int i=0;i}

}int num_old = sum;

for (int i=0;i}

}int a[num_old];

for(int i=0;isum = 0;

memset(vis,0,sizeof(vis));

for(int i=0;i}

}int answer=0;

for(int i=0;iprintf("%d",answer);

return 0;

}

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

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

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

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

第九屆藍橋杯之全球變暖

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