Step 1: Start DFS at node 1, assign discovery time and low value = 0
Node 1: disc=0, low=0 ↑
Nodes 2,3,4,5: disc=∞, low=∞
Why: We begin exploring from node 1 to assign discovery times and low values.
Step 2: Visit node 2 from node 1, disc=1, low=1
Node 1: disc=0, low=0
Node 2: disc=1, low=1 ↑
Others: disc=∞, low=∞
Why: We explore neighbors of 1; node 2 is next, so assign discovery and low.
Step 3: Visit node 3 from node 2, disc=2, low=2
Node 3: disc=2, low=2 ↑
Node 2: disc=1, low=1
Node 1: disc=0, low=0
Why: Continue DFS deeper to node 3, assign discovery and low.
Step 4: Node 3 has no unvisited neighbors, backtrack to node 2, update low[2] = min(low[2], low[3]) = 1
Node 2: disc=1, low=1 ↑
Node 3: disc=2, low=2
Node 1: disc=0, low=0
Why: Backtracking updates low values to reflect earliest reachable ancestor.
Step 5: Check if edge 2-3 is a bridge: low[3] > disc[2] (2 > 1) -> yes, record bridge (2,3)
Bridge found: (2,3)
Why: If low of child is greater than discovery of parent, edge is a bridge.
Step 6: Visit node 5 from node 2, disc=3, low=3
Node 5: disc=3, low=3 ↑
Node 2: disc=1, low=1
Node 1: disc=0, low=0
Why: Explore another neighbor of 2.
Step 7: Node 5 has no unvisited neighbors, backtrack to node 2, update low[2] = min(low[2], low[5]) = 1
Node 2: disc=1, low=1 ↑
Node 5: disc=3, low=3
Node 1: disc=0, low=0
Why: Backtracking updates low values.
Step 8: Check if edge 2-5 is a bridge: low[5] > disc[2] (3 > 1) -> yes, record bridge (2,5)
Bridge found: (2,5)
Why: Edge 2-5 is a bridge by the same rule.
Step 9: Backtrack to node 1, update low[1] = min(low[1], low[2]) = 0
Node 1: disc=0, low=0 ↑
Node 2: disc=1, low=1
Why: Update low of node 1 after exploring node 2.
Step 10: Visit node 4 from node 1, disc=4, low=4
Node 4: disc=4, low=4 ↑
Node 1: disc=0, low=0
Why: Explore another neighbor of 1.
Step 11: Node 4 has no unvisited neighbors, backtrack to node 1, update low[1] = min(low[1], low[4]) = 0
Node 1: disc=0, low=0 ↑
Node 4: disc=4, low=4
Why: Backtracking updates low values.
Step 12: Check if edge 1-4 is a bridge: low[4] > disc[1] (4 > 0) -> yes, record bridge (1,4)
Bridge found: (1,4)
Why: Edge 1-4 is a bridge.
Result: Bridges found:
(2,3)
(2,5)
(1,4)