📖 Scenario: Imagine a network of cities connected by roads. Some cities are very important because if they are closed, parts of the network become unreachable. These important cities are called articulation points.
🎯 Goal: You will build a program in Go to find all articulation points in a given undirected graph representing cities and roads.
📋 What You'll Learn
Create a graph using an adjacency list with exact cities and roads
Add variables to track discovery times and low values for each city
Implement DFS to find articulation points using Tarjan's algorithm
Print all articulation points found in the graph
💡 Why This Matters
🌍 Real World
Finding articulation points helps identify critical nodes in networks like computer networks, social networks, or transportation systems.
💼 Career
Understanding articulation points is useful for network reliability analysis, cybersecurity, and infrastructure planning roles.
Progress0 / 4 steps
1
Create the graph with cities and roads
Create a variable called graph as a map from int to []int representing the adjacency list. Add these exact edges: 0-1, 0-2, 1-2, 1-3, 3-4.
DSA Go
Hint
Use a map[int][]int to represent the graph. Each key is a city number, and the value is a list of connected cities.
2
Add variables for discovery time and low values
Add variables time as int, disc and low as slices of int with length 5, and visited as a slice of bool with length 5.
DSA Go
Hint
Initialize disc and low slices with length 5 for 5 cities. Use make to create slices.
3
Implement DFS to find articulation points
Write a function dfs with parameters u int, parent int, graph map[int][]int, visited []bool, disc []int, low []int, time *int, and ap []bool. Inside main, create ap slice of bool with length 5. Call dfs(0, -1, graph, visited, disc, low, &time, ap). Implement the DFS logic to update disc, low, and mark articulation points in ap using Tarjan's algorithm.
DSA Go
Hint
Use Tarjan's algorithm steps: mark discovery time, update low values, count children, and mark articulation points.
4
Print all articulation points
Add a for loop from i := 0 to i < 5. Inside the loop, if ap[i] is true, print "Articulation Point: " followed by i.
DSA Go
Hint
Loop through ap slice and print the index if it is true.
Practice
(1/5)
1. What is an articulation point in a graph?
easy
A. A vertex with the highest degree in the graph
B. A vertex that, when removed, increases the number of connected components
C. A vertex that has no edges connected to it
D. A vertex that forms a cycle with other vertices
Solution
Step 1: Understand the definition of articulation point
An articulation point is a vertex that, if removed, breaks the graph into more pieces (connected components).
Step 2: Compare options with definition
Only A vertex that, when removed, increases the number of connected components matches this definition exactly.
Final Answer:
A vertex that, when removed, increases the number of connected components -> Option B
Quick Check:
Articulation point = vertex increasing components when removed [OK]
Hint: Articulation point breaks graph connectivity when removed [OK]
Common Mistakes:
Confusing articulation point with highest degree vertex
Thinking articulation point is a vertex with no edges
Mixing articulation point with cycle vertices
2. Which Go code snippet correctly declares a graph as an adjacency list for articulation point detection?
easy
A. graph := make(map[int][]int)
B. graph := make(map[int]int)
C. graph := make([]int, n)
D. graph := make([][]int, n)
Solution
Step 1: Identify correct data structure for adjacency list
An adjacency list maps each vertex to a list of connected vertices, so map[int][]int is correct.
Step 2: Check other options
graph := make([][]int, n) is a slice of slices, which can work but usually fixed size; graph := make(map[int]int) is map[int]int (single int), not list; graph := make([]int, n) is slice of ints, not adjacency list.
Final Answer:
graph := make(map[int][]int) -> Option A
Quick Check:
Adjacency list = map vertex to list of neighbors [OK]
Hint: Adjacency list uses map[int][]int in Go [OK]
Common Mistakes:
Using map[int]int instead of map[int][]int
Using slice of ints instead of slice of slices or map
Confusing slice initialization with map initialization
3. What is the output of the following Go code snippet that finds articulation points in a graph with edges: 0-1, 1-2, 1-3?
Vertices 0,1,2,3 with edges 0-1, 1-2, 1-3 form a star with center 1.
Step 2: Identify articulation points
Removing vertex 1 disconnects the graph, so 1 is an articulation point; others are not.
Final Answer:
[1] -> Option C
Quick Check:
Center vertex in star graph is articulation point [OK]
Hint: Center vertex connecting others is articulation point [OK]
Common Mistakes:
Including leaf nodes as articulation points
Forgetting that removing center disconnects graph
Assuming multiple articulation points without checking connectivity
4. Find the bug in this Go code snippet for articulation point detection:
func dfs(u, parent int, graph map[int][]int, visited []bool, disc []int, low []int, time *int, ap []bool) {
visited[u] = true
disc[u] = *time
low[u] = *time
*time = *time + 1
children := 0
for _, v := range graph[u] {
if !visited[v] {
children++
dfs(v, u, graph, visited, disc, low, time, ap)
low[u] = min(low[u], low[v])
if parent != -1 && low[v] >= disc[u] {
ap[u] = true
}
} else if v != parent {
low[u] = min(low[u], disc[v])
}
}
if parent == -1 && children > 1 {
ap[u] = true
}
}
What is the error?
medium
A. Wrong comparison operator in if condition
B. Missing initialization of visited array
C. Incorrect base case for DFS
D. Incorrect increment syntax for time pointer (*time++)
Solution
Step 1: Check pointer increment syntax
The line '*time++' is invalid in Go; pointer dereference and increment must be done as '*time = *time + 1'.
Step 2: Verify other parts
Visited array initialization, if conditions, and DFS base case are correct.
Final Answer:
Incorrect increment syntax for time pointer (*time++) -> Option D
Quick Check:
Pointer increment in Go uses '*time = *time + 1' [OK]
Hint: Use '*time = *time + 1' to increment pointer value in Go [OK]
Common Mistakes:
Using '*time++' which is invalid in Go
Not initializing visited slice before DFS
Confusing parent check condition
Missing DFS base case for recursion
5. Given a connected graph with vertices 0 to 5 and edges: 0-1, 1-2, 2-0, 1-3, 3-4, 4-5, 5-3, which vertices are articulation points?
hard
A. [1,3]
B. [1,4]
C. [3]
D. [0,2,4]
Solution
Step 1: Analyze the graph structure
Vertices 0,1,2 form a triangle (cycle), so none are articulation points there. Vertices 3,4,5 form another cycle. Vertex 1 connects these two parts.
Step 2: Identify articulation points
Removing vertex 1 disconnects {0,2} from {3,4,5}. Removing vertex 3 disconnects {0,1,2} from {4,5}. Removing vertex 4 does not disconnect since 5 connects back to 3.
Final Answer:
[1,3] -> Option A
Quick Check:
Vertices connecting cycles or bridges are articulation points [OK]
Hint: Articulation points connect cycles or separate components [OK]
Common Mistakes:
Including vertices inside cycles as articulation points
Missing vertex 3 as articulation point
Assuming all cycle vertices are articulation points
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.