📖 Scenario: You are working with a 2D grid of numbers, like a map or a game board. You want to collect all the numbers by moving around the edges first, then moving inward in a spiral pattern.
🎯 Goal: Build a program that takes a fixed 2D matrix and prints its elements in a spiral order, starting from the top-left corner and moving clockwise inward.
📋 What You'll Learn
Create a 2D integer array called matrix with the exact values given.
Create integer variables top, bottom, left, and right to track the current edges of the matrix.
Use a while loop to traverse the matrix in a spiral order using the edge variables.
Print the elements in the spiral order separated by spaces.
💡 Why This Matters
🌍 Real World
Spiral traversal is useful in image processing, game development, and reading data stored in layers or rings.
💼 Career
Understanding matrix traversal techniques helps in coding interviews and solving problems involving 2D data structures.
Progress0 / 4 steps
1
Create the 2D matrix
Create a 2D integer array called matrix with these exact values: 1, 2, 3, 4 5, 6, 7, 8 9, 10, 11, 12 13, 14, 15, 16
DSA C#
Hint
Use int[,] to create a 2D array and initialize it with the given rows and columns.
2
Set up edge variables
Create integer variables top, bottom, left, and right to represent the edges of the matrix. Set top to 0, bottom to 3, left to 0, and right to 3.
DSA C#
Hint
These variables will help you track the current edges of the matrix as you move inward.
3
Traverse the matrix in spiral order
Use a while loop that runs while top <= bottom and left <= right. Inside the loop, traverse from left to right on the top row, then increment top. Next, traverse from top to bottom on the right column, then decrement right. Then traverse from right to left on the bottom row, then decrement bottom. Finally, traverse from bottom to top on the left column, then increment left. Collect all elements in a List<int> called result.
DSA C#
Hint
Use four loops inside the while loop to move right, down, left, and up, adjusting the edges after each direction.
4
Print the spiral order
Print the elements of the result list separated by spaces using Console.WriteLine.
DSA C#
Hint
Use string.Join(" ", result) inside Console.WriteLine to print all numbers separated by spaces.
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
Step 1: Understand traversal pattern
Spiral traversal means visiting matrix elements starting from the outer layer and moving inward in a circular pattern.
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.
Final Answer:
To visit all elements of a matrix in a spiral order starting from the top-left corner -> Option A
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
Step 1: Understand matrix dimensions in C#
matrix.GetLength(0) gives number of rows, matrix.GetLength(1) gives number of columns.
Step 2: Set boundaries correctly
Top and left start at 0; bottom and right are last indices (length - 1) for rows and columns respectively.
Final Answer:
int top = 0, bottom = matrix.GetLength(0) - 1, left = 0, right = matrix.GetLength(1) - 1; -> Option D
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
Step 1: Traverse top row left to right
Elements added: 1, 2, 3; then top moves from 0 to 1.
Step 2: Traverse right column top to bottom
Elements added: 6, 9; right moves from 2 to 1.
Step 3: Traverse bottom row right to left
Elements added: 8, 7; bottom moves from 2 to 1.
Step 4: Traverse left column bottom to top
Elements added: 4; left moves from 0 to 1.
Step 5: Repeat for inner layer
Now top=1, bottom=1, left=1, right=1; add element 5.
Final Answer:
1, 2, 3, 6, 9, 8, 7, 4, 5 -> Option A
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
Step 1: Check boundary initialization
bottom is set to matrix.GetLength(0), which is out of index range since indexing is zero-based.
Step 2: Correct bottom boundary
bottom should be matrix.GetLength(0) - 1 to point to the last valid row index.
Final Answer:
Change bottom to matrix.GetLength(0) - 1 to avoid index out of range -> Option B
Quick Check:
Zero-based indexing means last index = length - 1 [OK]
Hint: Remember zero-based indexing means last index = length - 1 [OK]