Bird
Raised Fist0
DSA C#programming~10 mins

Spiral Matrix Traversal in DSA C# - Execution Trace

Choose your learning style10 modes available
Concept Flow - Spiral Matrix Traversal
Start at top-left corner
↓
Traverse right along top row
↓
Traverse down along right column
↓
Traverse left along bottom row
↓
Traverse up along left column
↓
Move boundaries inward
↓
Repeat until all elements visited
We move around the matrix edges in a spiral: right, down, left, up, then shrink the boundaries and repeat until all elements are visited.
Execution Sample
DSA C#
int top = 0, bottom = rows - 1;
int left = 0, right = cols - 1;
while (top <= bottom && left <= right) {
  // Traverse right
  // Traverse down
  // Traverse left
  // Traverse up
  // Move boundaries inward
}
This code moves around the matrix edges in a spiral order, adjusting boundaries after each side is traversed.
Execution Table
StepOperationTopBottomLeftRightElements AddedVisual State
1Traverse right on top row0202[1, 2, 3][1, 2, 3] [4, 5, 6] [7, 8, 9]
2Traverse down on right column0202[6, 9][1, 2, 3] [4, 5, 6] [7, 8, 9]
3Traverse left on bottom row0202[8, 7][1, 2, 3] [4, 5, 6] [7, 8, 9]
4Traverse up on left column0202[4][1, 2, 3] [4, 5, 6] [7, 8, 9]
5Move boundaries inward1111[][1, 2, 3] [4, 5, 6] [7, 8, 9]
6Traverse right on top row1111[5][1, 2, 3] [4, 5, 6] [7, 8, 9]
7Move boundaries inward2020[][1, 2, 3] [4, 5, 6] [7, 8, 9]
8End traversal2020[][1, 2, 3] [4, 5, 6] [7, 8, 9]
💡 Top boundary (2) > Bottom boundary (0) and Left boundary (2) > Right boundary (0), traversal complete
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4After Step 5After Step 6After Step 7Final
top000001122
bottom222221100
left000001122
right222221100
Key Moments - 3 Insights
Why do we move the boundaries inward after completing one full spiral cycle?
After traversing the outer edges, moving boundaries inward (see Step 5) ensures we don't revisit the same elements and focus on the inner submatrix.
Why does the traversal stop when top > bottom or left > right?
When top > bottom or left > right (Step 8), it means all rows or columns have been covered, so no elements remain to visit.
Why do we traverse right, down, left, then up in that order?
This order (Steps 1-4) follows the spiral pattern around the matrix edges, ensuring all elements are visited without skipping or repeating.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table at Step 3, which elements are added to the result?
A[8, 7]
B[6, 9]
C[4]
D[1, 2, 3]
💡 Hint
Check the 'Elements Added' column at Step 3 in the execution_table.
At which step do the boundaries first move inward?
AStep 4
BStep 5
CStep 6
DStep 7
💡 Hint
Look at the 'Operation' column for 'Move boundaries inward' in the execution_table.
According to variable_tracker, what is the value of 'top' after Step 6?
A0
B1
C2
D3
💡 Hint
Check the 'top' row and 'After Step 6' column in variable_tracker.
Concept Snapshot
Spiral Matrix Traversal:
- Use four boundaries: top, bottom, left, right
- Traverse right, down, left, up edges in order
- After each full cycle, move boundaries inward
- Stop when top > bottom or left > right
- Collect elements in traversal order for spiral output
Full Transcript
Spiral Matrix Traversal moves around the edges of a matrix in a spiral pattern. We start at the top-left corner and move right along the top row, then down the right column, left along the bottom row, and up the left column. After completing these four moves, we move the boundaries inward to focus on the inner matrix. This repeats until the top boundary passes the bottom or the left boundary passes the right, meaning all elements have been visited. The execution table shows each step with the elements added and the current boundaries. The variable tracker shows how the top, bottom, left, and right boundaries change after each step. Key moments clarify why boundaries move inward and why traversal stops. The quiz tests understanding of elements added at each step and boundary changes.

Practice

(1/5)
1. What is the main idea behind Spiral Matrix Traversal?
easy
A. To visit all elements of a matrix in a spiral order starting from the top-left corner
B. To sort the matrix elements in ascending order
C. To find the maximum element in each row of the matrix
D. To transpose the matrix by swapping rows and columns

Solution

  1. Step 1: Understand traversal pattern

    Spiral traversal means visiting matrix elements starting from the outer layer and moving inward in a circular pattern.
  2. Step 2: Identify the traversal goal

    The goal is to visit every element exactly once in a spiral order, usually starting from the top-left corner.
  3. Final Answer:

    To visit all elements of a matrix in a spiral order starting from the top-left corner -> Option A
  4. Quick Check:

    Spiral traversal = visiting elements in spiral order [OK]
Hint: Think of peeling an onion layer by layer in a circle [OK]
Common Mistakes:
  • Confusing spiral traversal with sorting
  • Thinking it only visits diagonal elements
  • Assuming it transposes the matrix
2. Which of the following C# code snippets correctly initializes the boundaries for spiral traversal of a matrix named matrix?
easy
A. int top = 0, bottom = matrix.Length - 1, left = 0, right = matrix.GetLength(0) - 1;
B. int top = 1, bottom = matrix.Length, left = 1, right = matrix.Length;
C. int top = matrix.GetLength(1), bottom = 0, left = matrix.GetLength(0), right = 0;
D. int top = 0, bottom = matrix.GetLength(0) - 1, left = 0, right = matrix.GetLength(1) - 1;

Solution

  1. Step 1: Understand matrix dimensions in C#

    matrix.GetLength(0) gives number of rows, matrix.GetLength(1) gives number of columns.
  2. Step 2: Set boundaries correctly

    Top and left start at 0; bottom and right are last indices (length - 1) for rows and columns respectively.
  3. Final Answer:

    int top = 0, bottom = matrix.GetLength(0) - 1, left = 0, right = matrix.GetLength(1) - 1; -> Option D
  4. Quick Check:

    Correct boundary initialization = int top = 0, bottom = matrix.GetLength(0) - 1, left = 0, right = matrix.GetLength(1) - 1; [OK]
Hint: Use GetLength(0) for rows, GetLength(1) for columns [OK]
Common Mistakes:
  • Using matrix.Length which is total elements, not rows or columns
  • Swapping rows and columns in GetLength calls
  • Starting boundaries at 1 instead of 0
3. What is the output of the following C# code snippet for spiral traversal?
int[,] matrix = {
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9}
};

List<int> result = new List<int>();
int top = 0, bottom = 2, left = 0, right = 2;

while (top <= bottom && left <= right) {
  for (int i = left; i <= right; i++) result.Add(matrix[top, i]);
  top++;
  for (int i = top; i <= bottom; i++) result.Add(matrix[i, right]);
  right--;
  if (top <= bottom) {
    for (int i = right; i >= left; i--) result.Add(matrix[bottom, i]);
    bottom--;
  }
  if (left <= right) {
    for (int i = bottom; i >= top; i--) result.Add(matrix[i, left]);
    left++;
  }
}
Console.WriteLine(string.Join(", ", result));
medium
A. 1, 2, 3, 6, 9, 8, 7, 4, 5
B. 1, 4, 7, 8, 9, 6, 3, 2, 5
C. 1, 2, 3, 4, 5, 6, 7, 8, 9
D. 9, 8, 7, 6, 5, 4, 3, 2, 1

Solution

  1. Step 1: Traverse top row left to right

    Elements added: 1, 2, 3; then top moves from 0 to 1.
  2. Step 2: Traverse right column top to bottom

    Elements added: 6, 9; right moves from 2 to 1.
  3. Step 3: Traverse bottom row right to left

    Elements added: 8, 7; bottom moves from 2 to 1.
  4. Step 4: Traverse left column bottom to top

    Elements added: 4; left moves from 0 to 1.
  5. Step 5: Repeat for inner layer

    Now top=1, bottom=1, left=1, right=1; add element 5.
  6. Final Answer:

    1, 2, 3, 6, 9, 8, 7, 4, 5 -> Option A
  7. Quick Check:

    Spiral order of 3x3 matrix = 1, 2, 3, 6, 9, 8, 7, 4, 5 [OK]
Hint: Follow boundaries and shrink after each side [OK]
Common Mistakes:
  • Not updating boundaries correctly after each side
  • Skipping the inner elements
  • Reversing traversal directions incorrectly
4. Identify the bug in this spiral traversal code snippet and select the fix:
int top = 0, bottom = matrix.GetLength(0), left = 0, right = matrix.GetLength(1) - 1;
while (top <= bottom && left <= right) {
  for (int i = left; i <= right; i++) Console.Write(matrix[top, i] + " ");
  top++;
  for (int i = top; i <= bottom; i++) Console.Write(matrix[i, right] + " ");
  right--;
  if (top <= bottom) {
    for (int i = right; i >= left; i--) Console.Write(matrix[bottom, i] + " ");
    bottom--;
  }
  if (left <= right) {
    for (int i = bottom; i >= top; i--) Console.Write(matrix[i, left] + " ");
    left++;
  }
}
medium
A. Change right to matrix.GetLength(1) to include last column
B. Change bottom to matrix.GetLength(0) - 1 to avoid index out of range
C. Remove the if conditions checking top <= bottom and left <= right
D. Initialize top and left to 1 instead of 0

Solution

  1. Step 1: Check boundary initialization

    bottom is set to matrix.GetLength(0), which is out of index range since indexing is zero-based.
  2. Step 2: Correct bottom boundary

    bottom should be matrix.GetLength(0) - 1 to point to the last valid row index.
  3. Final Answer:

    Change bottom to matrix.GetLength(0) - 1 to avoid index out of range -> Option B
  4. Quick Check:

    Zero-based indexing means last index = length - 1 [OK]
Hint: Remember zero-based indexing means last index = length - 1 [OK]
Common Mistakes:
  • Using length instead of length - 1 for last index
  • Removing boundary checks causing infinite loops
  • Starting indices at 1 instead of 0
5. Given a rectangular matrix of size 3x4:
int[,] matrix = {
  {1, 2, 3, 4},
  {5, 6, 7, 8},
  {9, 10, 11, 12}
};

What is the spiral traversal output?
hard
A. 1, 2, 3, 4, 8, 12, 9, 10, 11, 5, 6, 7
B. 1, 5, 9, 10, 11, 12, 8, 4, 3, 2, 6, 7
C. 1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7
D. 1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 7, 6

Solution

  1. Step 1: Traverse top row left to right

    Elements: 1, 2, 3, 4; top moves from 0 to 1.
  2. Step 2: Traverse right column top to bottom

    Elements: 8, 12; right moves from 3 to 2.
  3. Step 3: Traverse bottom row right to left

    Elements: 11, 10, 9; bottom moves from 2 to 1.
  4. Step 4: Traverse left column bottom to top

    Elements: 5; left moves from 0 to 1.
  5. Step 5: Traverse inner row left to right

    Elements: 6, 7; top moves from 1 to 2.
  6. Final Answer:

    1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7 -> Option C
  7. Quick Check:

    Spiral order of 3x4 matrix = 1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7 [OK]
Hint: Shrink boundaries after each side, watch rectangular shape [OK]
Common Mistakes:
  • Mixing order of inner elements
  • Skipping last inner row or column
  • Confusing left and right boundaries
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard