📖 Scenario: You are working on a robot that needs to clean a room by moving in a spiral path. The room is represented as a grid of numbers, where each number shows the dirt level. The robot must visit each cell in a spiral order to clean efficiently.
🎯 Goal: Build a program that takes a 3x3 matrix and prints the elements in spiral order, starting from the top-left corner and moving clockwise.
📋 What You'll Learn
Create a 3x3 matrix with exact values
Use variables to track the boundaries of the matrix
Implement the spiral traversal logic using loops
Print the elements in the correct spiral order
💡 Why This Matters
🌍 Real World
Spiral traversal is useful in image processing, robot path planning, and printing matrix data in a readable pattern.
💼 Career
Understanding matrix traversal algorithms helps in technical interviews and solving problems related to grids and 2D data structures.
Progress0 / 4 steps
1
Create the 3x3 matrix
Create a 3x3 integer matrix called matrix with these exact rows: {1, 2, 3}, {4, 5, 6}, {7, 8, 9}.
DSA C++
Hint
Use a 2D array with 3 rows and 3 columns. Each row is enclosed in curly braces.
2
Set up boundary variables
Add four integer variables: top set to 0, bottom set to 2, left set to 0, and right set to 2. These will track the current edges of the matrix during traversal.
DSA C++
Hint
These variables mark the current edges of the matrix rows and columns.
3
Implement spiral traversal logic
Write a while loop that runs while top <= bottom and left <= right. Inside the loop, use for loops to traverse from left to right on the top row, top to bottom on the right column, right to left on the bottom row, and bottom to top on the left column. Update the top, bottom, left, and right variables accordingly after each traversal. Store the visited elements in a vector called result.
DSA C++
Hint
Use four loops inside the while loop to cover each side of the current rectangle. Update the boundaries after each side is processed.
4
Print the spiral order result
Use a for loop to print each element in the result vector separated by spaces on a single line.
DSA C++
Hint
Use a for loop to print each element in result followed by a space.
Practice
(1/5)
1. What is the main idea behind Spiral Matrix Traversal?
easy
A. Traverse only the diagonal elements of the matrix
B. Traverse the matrix row by row from top to bottom
C. Traverse the matrix column by column from left to right
D. Traverse the matrix in a circular pattern starting from the outer layer moving inward
Solution
Step 1: Understand traversal pattern
Spiral traversal means moving around the edges of the matrix and then moving inward layer by layer.
Step 2: Compare options
Only Traverse the matrix in a circular pattern starting from the outer layer moving inward describes moving in a circular pattern from outer to inner layers, which matches spiral traversal.
Final Answer:
Traverse the matrix in a circular pattern starting from the outer layer moving inward -> Option D
Quick Check:
Spiral traversal = circular outer to inner [OK]
Hint: Spiral means circle around edges then go inside [OK]
Common Mistakes:
Confusing spiral with row-wise or column-wise traversal
Thinking spiral means diagonal traversal
Ignoring the inward movement after outer layer
2. Which of the following C++ code snippets correctly initializes the boundaries for spiral traversal of an m x n matrix?
easy
A. int top = 0, bottom = n - 1, left = 0, right = m - 1;
B. int top = 0, bottom = m - 1, left = 0, right = n - 1;
C. int top = 1, bottom = m, left = 1, right = n;
D. int top = m - 1, bottom = 0, left = n - 1, right = 0;
Solution
Step 1: Understand boundary variables
Top and bottom represent row boundaries, left and right represent column boundaries. For an m x n matrix, top starts at 0, bottom at m-1, left at 0, right at n-1.
Step 2: Check each option
int top = 0, bottom = m - 1, left = 0, right = n - 1; correctly sets top=0, bottom=m-1, left=0, right=n-1. Others have reversed or incorrect assignments.
Final Answer:
int top = 0, bottom = m - 1, left = 0, right = n - 1; -> Option B
Hint: Top/left start at 0; bottom/right at size minus one [OK]
Common Mistakes:
Swapping m and n in boundary initialization
Starting boundaries at 1 instead of 0
Confusing row and column boundaries
3. What is the output of the following C++ code snippet for spiral traversal?
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int top = 0, bottom = 2, left = 0, right = 2;
while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++)
std::cout << matrix[top][i] << " ";
top++;
for (int i = top; i <= bottom; i++)
std::cout << matrix[i][right] << " ";
right--;
if (top <= bottom) {
for (int i = right; i >= left; i--)
std::cout << matrix[bottom][i] << " ";
bottom--;
}
if (left <= right) {
for (int i = bottom; i >= top; i--)
std::cout << matrix[i][left] << " ";
left++;
}
}
medium
A. 1 2 3 4 5 6 7 8 9
B. 1 4 7 8 9 6 3 2 5
C. 1 2 3 6 9 8 7 4 5
D. 9 8 7 6 5 4 3 2 1
Solution
Step 1: Trace the spiral traversal
First top row: 1 2 3 Right column down: 6 9 Bottom row left: 8 7 Left column up: 4 Next inner layer top row: 5
Step 2: Combine all elements in order
Combined output: 1 2 3 6 9 8 7 4 5
Final Answer:
1 2 3 6 9 8 7 4 5 -> Option C
Quick Check:
Spiral order = 1 2 3 6 9 8 7 4 5 [OK]
Hint: Follow edges clockwise, then move inward [OK]
Common Mistakes:
Printing rows or columns in wrong order
Skipping inner elements like 5
Repeating elements or missing boundaries update
4. Identify the bug in this spiral traversal code snippet:
int top = 0, bottom = m - 1, left = 0, right = n - 1;
while (top < bottom && left < right) {
for (int i = left; i <= right; i++) cout << matrix[top][i] << " ";
top++;
for (int i = top; i <= bottom; i++) cout << matrix[i][right] << " ";
right--;
for (int i = right; i >= left; i--) cout << matrix[bottom][i] << " ";
bottom--;
for (int i = bottom; i >= top; i--) cout << matrix[i][left] << " ";
left++;
}
medium
A. The while loop condition should use <= instead of < to include all layers
B. The for loops should use < instead of <= to avoid out-of-bound errors
C. The variables top, bottom, left, right are not initialized correctly
D. The code misses printing the diagonal elements
Solution
Step 1: Analyze loop condition
The while loop uses 'top < bottom && left < right', which skips the last layer when top == bottom or left == right.
Step 2: Correct condition for full traversal
Changing to 'top <= bottom && left <= right' ensures the last single row or column is included in traversal.
Final Answer:
The while loop condition should use <= instead of < to include all layers -> Option A
Quick Check:
Use <= in loop condition to cover all layers [OK]
Hint: Use <= in while condition to cover last layer [OK]