2018第九届蓝桥杯C语言第九题 全球变暖
生活随笔
收集整理的這篇文章主要介紹了
2018第九届蓝桥杯C语言第九题 全球变暖
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
你有一張某海域NxN像素的照片,"."表示海洋、"#"表示陸地,如下所示:
.......
.##....
.##....
....##.
..####.
...###.
.......
其中"上下左右"四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。 ?
由于全球變暖導致了海面上升,科學家預測未來幾十年,島嶼邊緣一個像素的范圍會被海水淹沒。具體來說如果一塊陸地像素與海洋相鄰(上下左右四個相鄰像素中有海洋),它就會被淹沒。 ?
例如上圖中的海域未來會變成如下樣子:
.......
.......
.......
.......
....#..
.......
.......
請你計算:依照科學家的預測,照片中有多少島嶼會被完全淹沒。 ?
【輸入格式】
第一行包含一個整數N。 ?(1 <= N <= 1000) ?
以下N行N列代表一張海域照片。 ?
照片保證第1行、第1列、第N行、第N列的像素都是海洋。 ?
【輸出格式】
一個整數表示答案。
【輸入樣例】
7?
.......
.##....
.##....
....##.
..####.
...###.
....... ?
【輸出樣例】
1 ?
資源約定:
峰值內存消耗(含虛擬機) < 256M
?
簡單深度優先搜索。不過需要注意的是求的是減少了島,不是剩余的島。
?代碼:
#include <iostream> //只要進行標記就行了。 #include <cstring> using namespace std; const int inf=1e3+7; struct node {char a;int flag; }themap[inf][inf]; int now=1,N; int x1[5]={0,0,1,0,-1}; int y1[5]={0,1,0,-1,0}; int temp[1000007]; bool check(int x,int y) {for(int i=1;i<=4;i++){if( themap[x+x1[i]][y+y1[i]].a=='#'&&themap[x+x1[i]][y+y1[i]].flag==0 )return false;}return true; } bool check1(int x,int y) //這里。 {for(int i=1;i<=4;i++){if(themap[x+x1[i]][y+y1[i]].a=='.')return false;}return true; } void dfs(int x,int y) {if(check(x,y)){return ;}for(int i=1;i<=4;i++){if( themap [ x+x1[i] ] [ y+y1[i] ].a=='#'&&x+x1[i]>=1&&x+x1[i]<=N&&y+y1[i]>=1&&y+y1[i]<=N &&themap[x+x1[i]][y+y1[i]].flag==0 ){themap[x+x1[i]][y+y1[i]].flag=now;dfs(x+x1[i],y+y1[i]);} } }int main() {memset( themap,0,sizeof(themap));memset(temp,0,sizeof(temp));cin>>N;getchar();for(int i=1;i<=N;i++) for(int j=1;j<=N;j++){scanf("%c",&themap[i][j].a);if(j==N)getchar(); }for(int i=1;i<=N;i++)for(int j=1;j<=N;j++){if(themap[i][j].flag ==0&&themap[i][j].a=='#'){themap[i][j].flag=now;dfs(i,j);now++;} }//cout<<now<<endl; for(int i=1;i<=N;i++)for(int j=1;j<=N;j++){if(themap[i][j].a=='#'&&check1(i,j) )temp[ themap[i][j].flag ]=1;}int ans=0;for(int i=1;i<=now+2;i++)if(temp[i]==1)ans++;cout<<now-1-ans<<endl;return 0; }?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的2018第九届蓝桥杯C语言第九题 全球变暖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: codeforces div3 D
- 下一篇: F - Tickets (预处理)