1 条题解

  • 0
    @ 2026-4-7 17:23:46

    本题唯一注意输入的接受

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    /* 1-9为细胞 上下左右在一堆就是同组 问有几组
     //这个题没意思就是上一个题的小改(可以在改一下让同数字才一组 但是也没意思)
     染色法 这次来dfs 
    */
    const int N=120;
    int s[N][N];
    int ans;
    int n,m; 
    int dx[]={1,-1,0,0};
    int dy[]={0,0,-1,1};
    void dfs(int x,int y)
    {  s[x][y]=0; 
       //终点咋写  答:不用写因为dfs会自动退出 dfs死循环只是因为 A-b b-A重复 
       for(int i=0;i<4;i++)
        { int nx=x+dx[i];
    	  int ny=y+dy[i];
    	  if(s[nx][ny]!=0)
    	   {  
    	      dfs(nx,ny); 
    	   }
        }
    }
    signed main()
    { std::ios::sync_with_stdio(0);
      cin.tie(0),cout.tie(0);
       cin>>n>>m;
        for(int i=1;i<=n;i++)//注意读入 
        {
            string str;
            cin >> str;
            for(int j=1;j<=m;j++)
            {
                s[i][j] = str[j-1]-'0'; // 字符串下标从0开始,数组从1开始
            }
        }
       for(int i=1;i<=n;i++)
       { 
    	  for(int j=1;j<=m;j++)
    	 {
    	   if(s[i][j]!=0) 
    	   {
    	    ans++;
    		dfs(i,j);  	
    	   }	
         }	 	
       }
       cout<<ans<<"\n";
    	return 0; 
    }
    

    信息

    ID
    163
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    116
    已通过
    54
    上传者