你有一張某海域nxn畫素的**,"."表示海洋、"#"表示陸地,如下所示:
.......
.##....
.##....
....##.
..####.
...###.
.......
其中"上下左右"四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。
由於全球變暖導致了海面上公升,科學家**未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰(上下左右四個相鄰畫素中有海洋),它就會被淹沒。
例如上圖中的海域未來會變成如下樣子:
.......
.......
.......
.......
....#..
.......
.......
請你計算:依照科學家的**,**中有多少島嶼會被完全淹沒。
【輸入格式】
第一行包含乙個整數n。 (1 <= n <= 1000)
以下n行n列代表一張海域**。
**保證第1行、第1列、第n行、第n列的畫素都是海洋。
【輸出格式】
乙個整數表示答案。
【輸入樣例】
7 .......
.##....
.##....
....##.
..####.
...###.
.......
【輸出樣例】
1 資源約定:
峰值記憶體消耗(含虛擬機器) < 256m
cpu消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」 的多餘內容。
注意:main函式需要返回0;
只使用ansi c/ansi c++ 標準;
不要呼叫依賴於編譯環境或作業系統的特殊函式。
所有依賴的函式必須明確地在原始檔中 #include
不能通過工程設定而省略常用標頭檔案。
提交程式時,注意選擇所期望的語言型別和編譯器型別。
附帶額外的測試資料:
輸入:
5
.....
.#...
...#.
.#...
.....
輸出:
輸入:
10
..........
.##.......
.##.......
....##.#..
..#######.
...###.#..
..........
..#....#..
......###.
..........
輸出:
輸入:
10
..........
..........
..........
....##.#..
..#######.
...###.#..
..........
..........
..........
..........
輸出:
思路:
理解題意:如果乙個島嶼(#)的它的上下左右都是#,那麼與它相連的島嶼就不會被淹沒,否則就會被淹沒。(使用此方法可以杜絕,淹沒後又產生新島嶼的情況)
**思路:使用bfs遍歷二維陣列(地圖):把當前元素入隊,獲取其x和y的座標,然後把它出隊,如果它沒有被遍歷過且它是島嶼,則判斷它的上下左右是否都是#(標記為已遍歷過),如果是,則標記這塊島嶼不會被淹沒,把位移後與它相鄰的且沒有遍歷過的島嶼,入佇列,繼續遍歷。當隊列為空時,返回;
如果這塊島嶼不會被淹沒,則不會被淹沒的島嶼數加1。
#include#include#includeusing namespace std;
const int maxn = 1005;
char a[maxn][maxn];//儲存地圖
int n;//矩陣的行列數
int vis[maxn][maxn];// 判斷該陸地是否被遍歷過
int dir[4][2]=,,,};//規定向左,下,右,上移動
struct point
};int bfs(int x,int y)}}
if(cnt == 4)//如果四周都是陸地
left++;
}return left;
}int main()
memset(vis, 0, sizeof(vis));//初始化全部的陸地均為未遍歷過
for(int i = 0; i < n; i++)//遍歷地圖}}
printf("%d\n", ans);
return 0;
}
參考**2:(遞迴)
#include#includeconst int maxn = 1005;
int n, len = 0, cnt = 0;
int vis[maxn][maxn], ans[maxn];
char arr[maxn][maxn];
void dfs(int a, int b, int k)
int main()
for(int i = 0; i < n; i++)}}
for(int i = 0; i < len; i++)
printf("%d", cnt);
return 0;
}
參考**3(模擬):
// 正確
#include #include #include #include using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 1000000007
using namespace std;
typedef long long ll;
const int maxn = 1e6+5;
const double esp = 1e-7;
const int ff = 0x3f3f3f3f;
map::iterator it;
struct node
};int n;
int cnt;
char mp[1005][1005];
int vis[1005][1005];
vectord[maxn];
int ne[4][2] = ;
void find(int x,int y)//尋找相連點
return ;
}void preprocess()//預處理島嶼
return ;
}void dfs(int x,int y)//侵蝕
return ;
}void solve()//開始侵蝕
int main()
cout
}
第九屆藍橋杯之全球變暖
你有一張某海域nxn畫素的 表示海洋,表示陸地,如下所示 其中 上下左右 四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。由於全球變暖導致了海面上公升,科學家 未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰 上下左右四個相鄰畫素中有海洋 它就會被淹...
藍橋杯 第九屆c語言省賽A組 全球變暖
你有一張某海域nxn畫素的 表示海洋 表示陸地,如下所示 其中 上下左右 四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。由於全球變暖導致了海面上公升,科學家 未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰 上下左右四個相鄰畫素中有海洋 它就會被淹...
全球變暖 第九屆藍橋杯省賽題目九
你有一張某海域nxn畫素的 表示海洋 表示陸地,如下所示 其中 上下左右 四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。由於全球變暖導致了海面上公升,科學家 未來幾十年,島嶼邊緣乙個畫素的範圍會 被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰 上下左右四個相鄰畫素中有海洋 它就會被...