2 条题解

  • 0
    @ 2024-1-30 11:43:40

    #include #include<bits/stdc++.h> using namespace std; const int N=1145; int n,m,ans; char a[N][N]; int dx[]={0,0,1,-1,1,1,-1,-1}; int dy[]={1,-1,0,0,-1,1,-1,1}; struct node{ int x,y; }; queue q; bool check(int x,int y){ if(x>=1&&x<=n&&y>=1&&y<=m&&a[x][y]'W') return 1; return 0; } void bfs(int x,int y){ q.push((node){x,y}); a[x][y]='.'; while(!q.empty()){ node top=q.front(); q.pop(); for(int i=0;i<=7;i++){ int xx=top.x+dx[i]; int yy=top.y+dy[i]; if(check(xx,yy)){ a[xx][yy]='.'; q.push((node){xx,yy}); } } } } int main() { cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(a[i][j]'W'){ ans++; bfs(i,j); } } } cout<<ans; return 0; }

    • -1
      @ 2024-3-10 19:33:49
      #include <iostream>
      #include <queue>
      using namespace std;
      int N,M,sum;
      char a[110][110];
      int dx[] = {-1,-1,-1,0,0,1,1,1};
      int dy[] = {1,0,-1,1,-1,1,0,-1};
      
      struct Node
      {
          int x;
          int y;
      };
      queue<Node>q;
      
      bool ia(int x,int y)
      {
          if (x >= 0 && x < N && y >= 0 && y < M && a[x][y] == 'W')
          {
              return true;
          }
          return false;
      }
      
      void bfs(int x,int y)
      {
          sum++;
          q.push((Node){x,y});
          a[x][y] = 'F';
          while (!q.empty())
          {
              Node temp = q.front();
              q.pop();
              for (int i = 0;i < 8;i++)
              {
                  int nx = temp.x + dx[i];
                  int ny = temp.y + dy[i];
                  if (ia(nx,ny) == true)
                  {
                      q.push((Node){nx,ny});
                      a[nx][ny] = 'F';
                  }
              }
          }
      }
      
      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] == 'W')
                  {
                      bfs(i,j);
                  }
              }
          }
          cout << sum;
          return 0;
      }
      
      • 1

      信息

      ID
      1351
      时间
      1000ms
      内存
      256MiB
      难度
      4
      标签
      递交数
      256
      已通过
      110
      上传者