2 条题解
-
0
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
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
- 上传者