top1编程
← 返回题目
题解

【入门】污染治理

1 条题解

  • 0
    @ 2026-7-28 23:26:25
    #include<bits/stdc++.h>
    using namespace std;
    char a[105][105];
    bool b[105][105];
    int n,m;
    int fx[10]={0,-1,0,1,0};
    int fy[10]={0,0,1,0,-1};
    int f(int x,int y){
    	b[x][y]=1;//标记访问过
    	int mj=1;//一个格子面积为1
    	for(int i=1;i<=4;i++){
    		int tx=x+fx[i];
    		int ty=y+fy[i];
    		//在范围内,被污染,未被访问
    		if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[tx][ty]=='*'&&b[tx][ty]==0){
    			mj+=f(tx,ty);//找到一个符合的数+1
    		}
    	}
    	return mj;
    }
    int main() {
    	cin>>n>>m;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			cin>>a[i][j];
    		}
    	}
    	int c=0;//污染区域
    	int maxn=0;//最大区域
    	int s=0;//总区域
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			//还没找过,且有污染的区域
    			if(b[i][j]==0&&a[i][j]=='*'){
    				c++;//污染区域+1
    				int x=f(i,j);//找污染面积
    				s+=x;//总面积
    				maxn=max(x,maxn);//找最大污染面积
    			}
    		}
    	}
    	cout<<c<<" "<<s<<" "<<maxn;
    	return 0;
    }
    
    • 1