1 条题解

  • 0
    @ 2024-9-11 22:35:20
    #include <bits/stdc++.h>
    using namespace std;
    
    char C[33][33];
    bool vis[33][33];
    int n;
    bool inrange(int x, int y) { return x >= 0 && x < n && y >= 0 && y < n; }
    
    void f(int x, int y) {
      // 从当前位置出发,遍历四个方向
      vis[x][y] = 1;
      // 往下
      int nx = x + 1, ny = y;
      while (inrange(nx, ny) && C[nx][ny] == '.') vis[nx++][ny] = 1;
      // 向上
      nx = x - 1, ny = y;
      while (inrange(nx, ny) && C[nx][ny] == '.') vis[nx--][ny] = 1;
      // 向左
      nx = x, ny = y - 1;
      while (inrange(nx, ny) && C[nx][ny] == '.') vis[nx][ny--] = 1;
      // 向右
      nx = x, ny = y + 1;
      while (inrange(nx, ny) && C[nx][ny] == '.') vis[nx][ny++] = 1;
    }
    
    int main() {
      cin >> n;
      for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++) cin >> C[i][j];
      for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
          if (C[i][j] == '*') f(i, j);
        }
      }
      int ans = 0;
      for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
          if (vis[i][j]) ans++;
      cout << ans;
      return 0;
    }
    
    • 1

    信息

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