萌新刚学C++,实在是想不到为什么WA
  • 板块题目总版
  • 楼主AFO_wyx
  • 当前回复15
  • 已保存回复15
  • 发布时间2023/1/14 10:23
  • 上次更新2023/10/24 04:20:28
查看原帖
萌新刚学C++,实在是想不到为什么WA
737939
AFO_wyx楼主2023/1/14 10:23

这是一个站外题

题目描述

气象卫星在南极上空拍摄到了一张 N×NN×N 大小的卫星图片。

在该图片中, . 表示该位置是海水、 # 表示该位置是冰川,下面给出一张卫星图片的示意图:

.......
.##....
.##....
....##.
..####.
...###.
.......

上下左右四方向相邻的一片冰川构成了一座庞大的冰原。上面给出的卫星图片中有 2 座冰原。

根据天气预报预测,未来 1 个月随着温度的升高,冰原边缘和海水相邻的冰川(上下左右四方向相邻),会融化。

上述卫星照片在 1 个月之后会是如下形态。

.......
.......
.......
.......
....#..
.......
.......

请编程计算出,给定的冰原中,会有多少个冰原在 1 个月后,完全融化。

输入

第一行包含一个整数 NN,代表卫星照片的大小。(1≤N≤1000)。

接下来 NN 行,每行有 NN 个字符,代表了拍摄到的南极海域的卫星照片。(数据保证照片的边界上的第 11 行、第 11 列、第 NN 行、第 NN 列都是海水,不是冰川)

输出

一个整数表示答案。

样例输入

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,为什么不对啊啊啊

2023/1/14 10:23
加载中...