Vertices (nodes) connected by edges.
- Directed — edges have direction
- Undirected — edges go both ways
Representation:
graph = {
"A": ["B", "C"],
"B": ["A", "D"],
"C": ["A"],
"D": ["B"],
}
from collections import deque
def bfs(graph, start):
visited = set()
queue = deque([start])
visited.add(start)
while queue:
node = queue.popleft()
print(node, end=" ")
for neighbor in graph[node]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
bfs(graph, "A")
BFS → shortest path (unweighted). DFS → reachability, cycle detection.