TGViewer
Swift | LeetCode Swift | LeetCode @easy_swift_task · 1.3K subscribers
Post #1151 95
Задача: 934. Shortest Bridge
Сложность: medium

Вам дана двоичная матричная сетка n x n, где 1 обозначает сушу, а 0 - воду. Остров - это 4-направленно связанная группа из 1, не соединенная ни с одной другой 1. В сетке ровно два острова. Вы можете поменять 0 на 1, чтобы соединить два острова в один. Верните наименьшее количество 0, которое нужно перевернуть, чтобы соединить два острова.

Пример:
Input: grid = [[0,1],[1,0]]
Output: 1


👨‍💻 Алгоритм:

1⃣Найти все клетки, принадлежащие первому острову, используя DFS/BFS, и добавить их в очередь для последующего расширения.

2⃣Использовать BFS для расширения из каждой клетки первого острова, чтобы найти кратчайший путь к клетке второго острова.

3⃣Вернуть длину кратчайшего пути.

😎 Решение:
class Solution {
func shortestBridge(_ grid: [[Int]]) -> Int {
let n = grid.count
var grid = grid

func neighbors(_ x: Int, _ y: Int) -> [(Int, Int)] {
return [(-1, 0), (1, 0), (0, -1), (0, 1)].map { (dx, dy) in (x + dx, y + dy) }.filter { (nx, ny) in 0 <= nx && nx < n && 0 <= ny && ny < n }
}

func bfs(_ queue: [(Int, Int)]) -> Int {
var queue = queue
var visited = Set(queue)
var steps = 0
while !queue.isEmpty {
var newQueue = [(Int, Int)]()
for (x, y) in queue {
for (nx, ny) in neighbors(x, y) {
if !visited.contains((nx, ny)) {
if grid[nx][ny] == 1 {
return steps
}
visited.insert((nx, ny))
newQueue.append((nx, ny))
}
}
}
queue = newQueue
steps += 1
}
return -1
}

func findFirstIsland() -> [(Int, Int)] {
for i in 0..<n {
for j in 0..<n {
if grid[i][j] == 1 {
var queue = [(i, j)]
grid[i][j] = -1
var island = [(i, j)]
while !queue.isEmpty {
let (x, y) = queue.removeFirst()
for (nx, ny) in neighbors(x, y) {
if grid[nx][ny] == 1 {
grid[nx][ny] = -1
queue.append((nx, ny))
island.append((nx, ny))
}
}
}
return island
}
}
}
return []
}

let island = findFirstIsland()
return bfs(island)
}
}


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_swift_task
  1. Oct 13, 2026Задача: 786. K-th Smallest Prime Fraction Сложность: medium Вам дан отсортированный массив…
  2. Oct 11, 2026Задача: 1325. Delete Leaves With a Given Value Сложность: medium Дано корневое дерево root…
  3. Oct 7, 2026🔥 Скрытые вакансии с удаленной работой для iOS разработчика, которые нигде больше не публ…
  4. Oct 4, 2026Задача: 523. Continuous Subarray Sum Сложность: medium Дан целочисленный массив nums и цел…
  5. Oct 4, 2026Задача: 1329. Sort the Matrix Diagonally Сложность: medium Диагональ матрицы — это диагона…
  6. Oct 3, 2026Задача: 200. Number of Islands Сложность: medium Дана двумерная бинарная сетка размером m…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →