Advertisement
podsolnyxxx

Дискретка 2 сем. 2 лаб. E

May 18th, 2024
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.86 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. // Функция для проверки корректности координат и значения клетки
  7. bool isValid(int x, int y, int M, int N, const vector<vector<char>>& grid, vector<vector<bool>>& visited) {
  8.     return (x >= 0 && x < M && y >= 0 && y < N && grid[x][y] == '#' && !visited[x][y]);
  9. }
  10.  
  11. // Функция для выполнения DFS
  12. void dfs(int x, int y, int M, int N, const vector<vector<char>>& grid, vector<vector<bool>>& visited) {
  13.     // Направления движения: вверх, вниз, влево, вправо
  14.     int dx[] = { -1, 1, 0, 0 };
  15.     int dy[] = { 0, 0, -1, 1 };
  16.  
  17.     // Помечаем текущую клетку как посещенную
  18.     visited[x][y] = true;
  19.  
  20.     // Рекурсивно посещаем все соседние клетки
  21.     for (int i = 0; i < 4; ++i) {
  22.         int newX = x + dx[i];
  23.         int newY = y + dy[i];
  24.         if (isValid(newX, newY, M, N, grid, visited)) {
  25.             dfs(newX, newY, M, N, grid, visited);
  26.         }
  27.     }
  28. }
  29.  
  30. int main() {
  31.     int M, N;
  32.     cin >> M >> N;
  33.     vector<vector<char>> grid(M, vector<char>(N));
  34.  
  35.     // Считываем матрицу
  36.     for (int i = 0; i < M; ++i) {
  37.         for (int j = 0; j < N; ++j) {
  38.             cin >> grid[i][j];
  39.         }
  40.     }
  41.  
  42.     vector<vector<bool>> visited(M, vector<bool>(N, false));
  43.     int components = 0;
  44.  
  45.     // Поиск всех компонентов
  46.     for (int i = 0; i < M; ++i) {
  47.         for (int j = 0; j < N; ++j) {
  48.             if (grid[i][j] == '#' && !visited[i][j]) {
  49.                 dfs(i, j, M, N, grid, visited);
  50.                 components++;
  51.             }
  52.         }
  53.     }
  54.  
  55.     // Вывод количества компонентов
  56.     cout << components << endl;
  57.  
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement