Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. DFS: Сетки
dfs_grid

DFS: Сетки

Number of Islands, Max Area, Word Search.

DFS: Задачи на сетках

Обход сеток с помощью DFS. Подсчёт островов, площадь, поиск слов.

#1. Number of Islands (LeetCode 200) — DFS версия 🟦 Medium

Ссылка: https://leetcode.com/problems/number-of-islands/

Условие: Дана двумерная сетка grid, состоящая из символов '1' (земля) и '0' (вода). Верните количество островов.

Примеры:

Ввод: grid = [
  ["1","1","1","1","0"],
  ["1","1","0","1","0"],
  ["1","1","0","0","0"],
  ["0","0","0","0","0"]
]
Вывод: 1

Решение:

def numIslands(grid): if not grid: return 0 rows, cols = len(grid), len(grid[0]) count = 0 def dfs(r, c): if (r < 0 or c < 0 or r >= rows or c >= cols or grid[r][c] == '0'): return grid[r][c] = '0' # Помечаем как посещённый dfs(r + 1, c) dfs(r - 1, c) dfs(r, c + 1) dfs(r, c - 1) for i in range(rows): for j in range(cols): if grid[i][j] == '1': dfs(i, j) count += 1 return count

Объяснение:

  • Проходим по каждой клетке
  • При встрече '1' запускаем DFS, помечая всю компоненту
  • Увеличиваем счётчик островов

Сложность: O(m × n)


#2. Max Area of Island (LeetCode 695) 🟦 Medium

Ссылка: https://leetcode.com/problems/max-area-of-island/

Условие: Найдите максимальную площадь острова (количество единиц в компоненте связности).

Решение:

def maxAreaOfIsland(grid): if not grid: return 0 rows, cols = len(grid), len(grid[0]) max_area = 0 def dfs(r, c): if (r < 0 or c < 0 or r >= rows or c >= cols or grid[r][c] == 0): return 0 grid[r][c] = 0 area = 1 area += dfs(r + 1, c) area += dfs(r - 1, c) area += dfs(r, c + 1) area += dfs(r, c - 1) return area for i in range(rows): for j in range(cols): if grid[i][j] == 1: max_area = max(max_area, dfs(i, j)) return max_area

Объяснение:

  • DFS возвращает площадь компоненты
  • Обнуляем посещённые клетки

Сложность: O(m × n)


#3. Word Search (LeetCode 79) 🟦 Medium

Ссылка: https://leetcode.com/problems/word-search/

Условие: Дана сетка board и слово word. Верните true, если слово существует в сетке.

Примеры:

Ввод: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
Вывод: true

Решение:

def exist(board, word): rows, cols = len(board), len(board[0]) def dfs(r, c, index): if index == len(word): return True if (r < 0 or c < 0 or r >= rows or c >= cols or board[r][c] != word[index]): return False temp = board[r][c] board[r][c] = '#' # Помечаем found = (dfs(r + 1, c, index + 1) or dfs(r - 1, c, index + 1) or dfs(r, c + 1, index + 1) or dfs(r, c - 1, index + 1)) board[r][c] = temp # Восстанавливаем return found for i in range(rows): for j in range(cols): if dfs(i, j, 0): return True return False

Объяснение:

  • Помечаем board[r][c] = '#' для предотвращения повторного посещения
  • После DFS восстанавливаем значение

Сложность: O(m × n × 4^L)


#4. Шпаргалка

ЗадачаКлючевая идея
Number of IslandsDFS для каждой '1', mark as '0'
Max AreaDFS возвращает площадь
Word SearchMark/restore с '#'

#5. ⚠️ Common Mistakes

#❌ Ошибка 1: Забыли восстанавливать клетку

# ❌ Неправильно board[r][c] = '#' found = dfs(r + 1, c, index + 1) # Забыли восстановить! # ✅ Правильно temp = board[r][c] board[r][c] = '#' found = dfs(r + 1, c, index + 1) board[r][c] = temp

#❌ Ошибка 2: Неправильный базовый случай

# ❌ Неправильно if index == len(word) - 1: # Не доходит до последнего символа! # ✅ Правильно if index == len(word): # Все символы найдены

#6. Заключение

DFS: Задачи на сетках — обход сеток с mark/restore.

Ключевые приёмы:

  1. Mark as visited через модификацию сетки
  2. Восстанавливаем значение после DFS
  3. 4 направления: (1,0), (-1,0), (0,1), (0,-1)

Далее: DFS: Графы