建议升紫
  • 板块P4961 小埋与扫雷
  • 楼主qj10
  • 当前回复16
  • 已保存回复16
  • 发布时间2024/4/21 10:46
  • 上次更新2024/4/21 12:34:26
查看原帖
建议升紫
1043311
qj10楼主2024/4/21 10:46
#include<iostream>
using namespace std;
int arr[1005][1005];
int fx[8][2]={{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
int n,m;
void dfs(int x,int y){
	if(arr[x][y]!=2) return;
	arr[x][y] = 4;
	dfs(x+1,y);
	dfs(x+1,y+1);
	dfs(x,y+1);
	dfs(x-1,y+1);
	dfs(x-1,y);
	dfs(x-1,y-1);
	dfs(x,y-1);
	dfs(x+1,y-1);
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>arr[i][j];
		}
	}
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(arr[i+1][j] != 1 &&arr[i+1][j+1] != 1 &&arr[i][j+1] != 1 &&arr[i-1][j+1] != 1 &&arr[i-1][j] != 1 &&arr[i-1][j-1] != 1 &&arr[i][j-1] != 1 &&arr[i+1][j-1] != 1 && arr[i][j]==0)arr[i][j] = 2;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(arr[i+1][j] != 1 &&arr[i+1][j+1] != 1 &&arr[i][j+1] != 1 &&arr[i-1][j+1] != 1 &&arr[i-1][j] != 1 &&arr[i-1][j-1] != 1 &&arr[i][j-1] != 1 &&arr[i+1][j-1] != 1 && arr[i][j]==2){
				if(arr[i+1][j]!=2) arr[i+1][j] = 3;
				if(arr[i+1][j+1]!=2) arr[i+1][j+1]= 3;
				if(arr[i][j+1]!=2) arr[i][j+1] = 3;
				if(arr[i-1][j+1]!=2) arr[i-1][j+1]=3;
				if(arr[i-1][j]!=2) arr[i-1][j]=3;
				if(arr[i-1][j-1]!=2) arr[i-1][j-1]=3;
				if(arr[i][j-1]!=2) arr[i][j-1] = 3;
				if(arr[i+1][j-1]!=2) arr[i+1][j-1] = 3;
			} 
		}
	}
	int cnt =0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(arr[i][j] == 0) cnt++;
			else{
				if(arr[i][j]==2){
					dfs(i,j);
					cnt++;
				}
			}
		}
	}
	cout<<cnt;
	return 0;
}
2024/4/21 10:46
加载中...