2 条题解

  • 0
    @ 2024-11-11 15:49:09

    dfs:

    //DFS
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 105;
    int a[N][N], n, m;
    int dx[4] = {-1, 1, 0, 0};
    int dy[4] = {0, 0, -1, 1};
    
    void dfs(int x, int y) {
        a[x][y] = 0;
        for (int i = 0; i < 4; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];
            if (nx < 1 || nx > n || ny < 1 || ny > m) continue;
            if (a[nx][ny] == 0) continue;
            dfs(nx, ny);
        }
    }
    
    int main() {
        cin >> n >> m;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++) {
                char c;
                cin >> c;
                a[i][j] = c - '0';
            }
        int sum = 0;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++) {
                if (a[i][j] > 0) {
                    dfs(i, j);
                    sum++;
                }
            }
        cout << sum;
        return 0;
    }
    
    
    • 0
      @ 2024-11-11 15:48:48

      bfs:

      //BFS
      #include <bits/stdc++.h>
      using namespace std;
      const int N = 105;
      int a[N][N], n, m;
      int dx[4] = {-1, 1, 0, 0};
      int dy[4] = {0, 0, -1, 1};
      struct Point {
          int x, y;
      };
      
      void bfs(int x, int y) {
          queue<Point> q;
          q.push({x, y});
          a[x][y] = 0;
          while (q.size()) {
              Point p = q.front();
              q.pop();
              for (int i = 0; i < 4; i++) {
                  int nx = p.x + dx[i];
                  int ny = p.y + dy[i];
                  if (nx < 1 || nx > n || ny < 1 || ny > m) continue;
                  if (a[nx][ny] == 0) continue;
                  a[nx][ny] = 0;
                  q.push({nx, ny});
              }
          }
      }
      
      int main() {
          cin >> n >> m;
          for (int i = 1; i <= n; i++)
              for (int j = 1; j <= m; j++) {
                  char c;
                  cin >> c;
                  a[i][j] = c - '0';
              }
          int sum = 0;
          for (int i = 1; i <= n; i++)
              for (int j = 1; j <= m; j++) {
                  if (a[i][j] > 0) {
                      bfs(i, j);
                      sum++;
                  }
              }
          cout << sum;
          return 0;
      }
      
      
      • 1

      信息

      ID
      807
      时间
      1000ms
      内存
      256MiB
      难度
      10
      标签
      递交数
      1
      已通过
      1
      上传者