7 条题解

  • 0
    @ 2025-3-15 22:18:35

    这也是一个连通块基础题好吧!

    1.首先,我们先来定义一下变量
    int n,m,ans;
    char a[105][105];
    bool vis[105][105];
    int dx[4]={-1,1,0,0};
    int dy[4]={0,0,-1,1};
    
    2.接下来就是最最最简单的主函数部分了
    int main(){
    	cin>>n>>m;
    	for(int i=0;i<n;i++){	
    		for(int j=0;j<m;j++){
    			cin>>a[i][j];
    		}
    	}
    
    此处我想每个人都会吧(除!@#外)
    	for(int i=0;i<n;i++){
    		for(int j=0;j<m;j++){
    			if(a[i][j]=='#'&&vis[i][j]==0){
    				vis[i][j]=1;
    				dfs(i,j);
    				ans++;
    			}
    		}
    	}
    
    最后的最后,被忘了输出
    cout<<ans;
    return 0;
    
    3.接下来,最难的函数部分到了(但还是无敌的简单)
    void dfs(int x,int y){
    for(int i=0;i<4;i++){
    		int xx=x+dx[i];
    		int yy=y+dy[i];
    		if(xx>=0&&yy>=0&&xx<n&&yy<m&&vis[xx][yy]==0&&a[xx][yy]=='#'){
    			vis[xx][yy]=1;
    			dfs(xx,yy);
    		}
    	}
    }
    
    4.最后最后最后全部代码就在下方了(应该没人不会吧)
    #include<bits/stdc++.h>
    using namespace std;
    int n,m,ans;
    char a[105][105];
    bool vis[105][105];
    int dx[4]={-1,1,0,0};
    int dy[4]={0,0,-1,1};
    void dfs(int x,int y){
    for(int i=0;i<4;i++){
    		int xx=x+dx[i];
    		int yy=y+dy[i];
    		if(xx>=0&&yy>=0&&xx<n&&yy<m&&vis[xx][yy]==0&&a[xx][yy]=='#'){
    			vis[xx][yy]=1;
    			dfs(xx,yy);
    		}
    	}
    }
    int main(){
    	cin>>n>>m;
    	for(int i=0;i<n;i++){	
    		for(int j=0;j<m;j++){
    			cin>>a[i][j];
    		}
    	}
    	for(int i=0;i<n;i++){
    		for(int j=0;j<m;j++){
    			if(a[i][j]=='#'&&vis[i][j]==0){
    				vis[i][j]=1;
    				dfs(i,j);
    				ans++;
    			}
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    

    第一次发题解请大家互相关照(点亿个赞哦)!!!!!!!

    拜拜

    信息

    ID
    2744
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    57
    已通过
    23
    上传者