Discover how a simple table can turn a messy friendship list into a powerful connection map!
Why Adjacency Matrix Representation in DSA Go?
Imagine you want to keep track of friendships in a small group of people using just a paper and pencil. You try to write down who is friends with whom by listing every pair manually.
This manual method quickly becomes confusing and slow as the group grows. You might forget some pairs or write duplicates. Checking if two people are friends means scanning through your messy notes.
An adjacency matrix is like a neat table where rows and columns represent people, and each cell shows if a friendship exists. This makes checking and updating friendships fast and clear.
var friendships = map[string][]string{
"Alice": {"Bob", "Carol"},
"Bob": {"Alice"},
}
// To check if Alice and Bob are friends, scan Alice's listvar adjacencyMatrix = [][]int{
{0, 1, 1},
{1, 0, 0},
{1, 0, 0},
}
// Check if Alice and Bob are friends by adjacencyMatrix[0][1] == 1It enables quick and simple checks of connections between any two points in a network.
Social media platforms use adjacency matrices to quickly find if two users are connected or to suggest new friends.
Manual tracking of connections is slow and error-prone.
Adjacency matrix uses a clear table to represent connections.
This method makes checking and updating connections fast and easy.
Practice
Solution
Step 1: Understand adjacency matrix concept
An adjacency matrix is a 2D array where rows and columns represent nodes.Step 2: Identify what the matrix stores
Each cell shows if there is a connection (edge) between two nodes.Final Answer:
A 2D array showing connections between nodes -> Option AQuick Check:
Adjacency matrix = 2D array [OK]
- Confusing adjacency matrix with adjacency list
- Thinking it stores edges as a list
- Assuming it represents a tree only
Solution
Step 1: Understand Go array declaration
In Go, a fixed-size 2D array is declared as [rows][cols]type.Step 2: Check each option
var matrix [3][3]int declares a 3x3 int array correctly. matrix := make([]int, 3) is a 1D slice. var matrix [][]int = make([][]int, 3) is a slice of slices but incomplete. matrix := [3]int{3} is a 1D array with wrong initialization.Final Answer:
var matrix [3][3]int -> Option AQuick Check:
Fixed 2D array = [3][3]int [OK]
- Using slices instead of arrays for fixed size
- Incorrect initialization syntax
- Confusing 1D and 2D declarations
package main
import "fmt"
func main() {
var graph [3][3]int
graph[0][1] = 1
graph[1][2] = 1
graph[2][0] = 1
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
fmt.Print(graph[i][j], " ")
}
fmt.Println()
}
}Solution
Step 1: Trace assignments to the matrix
graph[0][1] = 1 means node 0 connects to 1; graph[1][2] = 1 means node 1 connects to 2; graph[2][0] = 1 means node 2 connects to 0.Step 2: Print matrix row by row
Row 0: 0 1 0; Row 1: 0 0 1; Row 2: 1 0 0.Final Answer:
0 1 0 0 0 1 1 0 0 -> Option CQuick Check:
Edges set match matrix rows [OK]
- Mixing row and column indices
- Assuming symmetric matrix for directed graph
- Forgetting zero initialization
var graph [][]int
for i := 0; i < 3; i++ {
graph[i] = make([]int, 3)
}Solution
Step 1: Check graph slice initialization
graph is declared but not initialized with length, so graph[i] access causes runtime error.Step 2: Fix initialization
graph should be initialized with length 3 before assigning inner slices, e.g., graph = make([][]int, 3).Final Answer:
graph is not initialized before assignment -> Option DQuick Check:
Initialize outer slice before indexing [OK]
- Forgetting to initialize outer slice
- Confusing slice length and capacity
- Incorrect loop ranges
Solution
Step 1: Understand undirected graph edge representation
In undirected graphs, edges are bidirectional, so adjacency matrix must be symmetric.Step 2: Update both directions in matrix
Set graph[1][3] = 1 and graph[3][1] = 1 to represent the edge correctly.Final Answer:
graph[1][3] = 1; graph[3][1] = 1 -> Option BQuick Check:
Undirected edge updates both matrix cells [OK]
- Updating only one direction for undirected graph
- Setting diagonal elements instead of edge cells
- Confusing node indices
Ready to prove it?
Pass the test and this pattern moves unknown
