2 条题解

  • 0
    @ 2026-8-16 21:33:39
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    const int N=1010;
    int n,m;
    char g[N][N];
    int dx[8]={-1,-1,-1,0,1,1,1,0};
    int dy[8]={-1,0,1,1,1,0,-1,-1};
    
    void dfs(int x,int y){
      g[x][y]='.';
      for(int i=0;i<8;i++){
        int a=x+dx[i],b=y+dy[i];
        if(a<0||a>=n||b<0||b>=m)continue;
        if(g[a][b]=='.')continue;
        dfs(a,b);
      }
    }
    int main(){
      cin >> n >> m;
      for(int i=0;i<n;i++) 
        scanf("%s",g[i]);
      int ans=0;
      for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
          if(g[i][j]=='W')
            ans++, dfs(i,j);
      cout << ans << endl;
      return 0;
    }
    
    • 0
      @ 2025-10-8 17:00:31
      #include <bits/stdc++.h>
      using namespace std;
      const int N=110;
      int dx[8]={0,0,1,1,1,-1,-1,-1};
      int dy[8]={1,-1,0,1,-1,0,1,-1};
      int n,m,a[N][N];char s[N];
      void dfs(int x,int y)
      {
          a[x][y]=0;
          for(int i=0;i<=7;i++)
              if(a[x+dx[i]][y+dy[i]]==1)
                  dfs(x+dx[i],y+dy[i]);
      }
      int main()
      {
          scanf("%d%d",&n,&m);
          memset(a,0,sizeof(a));
          for(int i=1;i<=n;i++)
          {
              scanf("%s",s+1);
              for(int j=1;j<=m;j++)a[i][j]=(s[j]=='W');
          }
          int ans=0;
          for(int i=1;i<=n;i++)
              for(int j=1;j<=m;j++)
                  if(a[i][j]==1)
                  {
                      ans++;
                      dfs(i,j);
                  }
          printf("%d",ans);
          return 0;
      }
      
      • 1

      B10【递归:Floodfill】池塘计数 [USACO10OCT] Lake Counting S

      信息

      ID
      2236
      时间
      1000ms
      内存
      128MiB
      难度
      3
      标签
      递交数
      32
      已通过
      20
      上传者