这是一个站外题
气象卫星在南极上空拍摄到了一张 N×N 大小的卫星图片。
在该图片中, . 表示该位置是海水、 # 表示该位置是冰川,下面给出一张卫星图片的示意图:
.......
.##....
.##....
....##.
..####.
...###.
.......
上下左右四方向相邻的一片冰川构成了一座庞大的冰原。上面给出的卫星图片中有 2 座冰原。
根据天气预报预测,未来 1 个月随着温度的升高,冰原边缘和海水相邻的冰川(上下左右四方向相邻),会融化。
上述卫星照片在 1 个月之后会是如下形态。
.......
.......
.......
.......
....#..
.......
.......
请编程计算出,给定的冰原中,会有多少个冰原在 1 个月后,完全融化。
第一行包含一个整数 NN,代表卫星照片的大小。(1≤N≤1000)。
接下来 N 行,每行有 N 个字符,代表了拍摄到的南极海域的卫星照片。(数据保证照片的边界上的第 1 行、第 1 列、第 N 行、第 N 列都是海水,不是冰川)
一个整数表示答案。
7
.......
.##....
.##....
....##.
..####.
...###.
.......
1
我的代码:
#include<bits/stdc++.h>
using namespace std;
int n,fx[5]={0,0,1,0,-1},fy[5]={0,1,0,-1,0};
char a[1010][1010],b[1010][1010];
void dfs(int x,int y){
int i,tx,ty;
for(i=1;i<=4;i++){
tx=x+fx[i];
ty=y+fy[i];
if(a[tx][ty]=='#'&&tx<=n&&tx>=1&&ty<=n&&ty>=1)dfs(tx,ty);
}
}int main(){
int i,j,sum=0;
cin>>n;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
cin>>a[i][j];
b[i][j]=a[i][j];
}
}for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(i==1||i==n||j==1||j==n)a[i][j]='.';
if(b[i-1][j]=='.'||b[i][j-1]=='.'||b[i+1][j]=='.'||b[i][j+1]=='.')a[i][j]='.';
}
}for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(a[i][j]=='#'){
dfs(i,j);
sum++;
}
}
}cout<<sum;
return 0;
}
这题我用的大摸拟+floodfill,为什么不对啊啊啊