岛屿深搜
岛屿广搜
class Solution {
func numIslands(_ grid: [[Character]]) -> Int {
var visited = Array(repeating: Array(repeating: false, count: grid[0].count), count: grid.count)
var direction = [(-1, 0), (1, 0), (0, -1), (0, 1)]
func dfs(_ i: Int, _ j: Int) {
guard i >= 0, i < grid.count, j >= 0, j < grid[0].count, grid[i][j] == Character("1"), !visited[i][j] else {
return
}
visited[i][j] = true
for forward in direction {
dfs(i + forward.0, j + forward.1)
}
}
var res = 0
for i in 0..<grid.count {
for j in 0..<grid[0].count {
if visited[i][j] == false, grid[i][j] == Character("1") {
res += 1
dfs(i, j)
}
}
}
return res
}
class Solution {
func numIslands(_ grid: [[Character]]) -> Int {
var visited = Array(repeating: Array(repeating: false, count: grid[0].count), count: grid.count)
var direction = [(-1, 0), (1, 0), (0, -1), (0, 1)]
func bfs(_ point: (Int, Int)) {
var queue = [(Int, Int)]()
queue.append(point)
visited[point.0][point.1] = true
while !queue.isEmpty {
let curPoint = queue.removeLast()
for forward in direction {
let nextX = curPoint.0 + forward.0
let nextY = curPoint.1 + forward.1
if nextX >= 0, nextX < grid.count, nextY >= 0, nextY < grid[0].count,
grid[nextX][nextY] == Character("1"), !visited[nextX][nextY] {
visited[nextX][nextY] = true
queue.append((nextX, nextY))
}
}
}
}
var res = 0
for i in 0..<grid.count {
for j in 0..<grid[0].count {
if visited[i][j] == false, grid[i][j] == Character("1") {
res += 1
bfs((i, j))
}
}
}
return res
}
}
讲解
class Solution {
func maxAreaOfIsland(_ grid: [[Int]]) -> Int {
var visited = Array(repeating: Array(repeating: false, count: grid[0].count), count: grid.count)
let directions = [(1, 0), (0, 1), (-1, 0), (0, -1)]
var count = 0
var res = 0
func dfs(_ i: Int, _ j: Int) {
guard i >= 0, i < grid.count, j >= 0, j < grid[0].count, grid[i][j] == 1, !visited[i][j] else { return }
count += 1
visited[i][j] = true
for direction in directions {
dfs(i + direction.0, j + direction.1)
}
}
for i in 0..<grid.count {
for j in 0..<grid[0].count {
if grid[i][j] == 1, !visited[i][j] {
count = 0
dfs(i, j)
res = max(res, count)
}
}
}
return res
}
}