Duyệt đồ thị (BFS/DFS)
Tổng quan
| BFS | DFS | |
|---|---|---|
| Tên | Breadth-First Search | Depth-First Search |
| Cấu trúc | Queue | Stack/Recursion |
| Đường đi ngắn nhất | ✅ (unweighted) | ❌ |
BFS (Breadth-First Search)
Python
from collections import deque
def bfs(graph, start):
visited = set([start])
queue = deque([start])
result = []
while queue:
node = queue.popleft()
result.append(node)
for neighbor in graph.get(node, []):
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
return resultDFS (Depth-First Search)
Python
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
result = [start]
for neighbor in graph.get(start, []):
if neighbor not in visited:
result.extend(dfs(graph, neighbor, visited))
return resultNumber of Islands
Python
def num_islands(grid):
if not grid:
return 0
rows, cols = len(grid), len(grid[0])
count = 0
def dfs(r, c):
if r < 0 or r >= rows or c < 0 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 r in range(rows):
for c in range(cols):
if grid[r][c] == '1':
count += 1
dfs(r, c)
return count🎉
Hoàn thành! Chúc mừng bạn đã hoàn thành loạt bài về CTDL & Giải thuật! Tiếp tục thực hành trên LeetCode để củng cố kiến thức.
Last updated on