Skip to content

Commit 3142daf

Browse files
authored
Create spiral_matrix.cpp
1 parent c848e11 commit 3142daf

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

c++/spiral_matrix.cpp

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/Problem: Given an m x n matrix, return all elements of the matrix in spiral order.
2+
/*
3+
Input:
4+
n=3 m=3
5+
Matriz:
6+
2 3 5
7+
19 23 7
8+
17 13 11
9+
Output:
10+
vector => 2 3 5 7 11 13 17 19 23
11+
*/
12+
#include <iostream>
13+
#include<vector>
14+
#include<cmath>
15+
using namespace std;
16+
vector<int> SpiralOrder(vector<vector<int>> Mat,int n,int m) {
17+
int val = 0,a[n][m];
18+
int k = 0, l = 0;
19+
/* k - starting row index
20+
n - ending row index
21+
l - starting column index
22+
m - ending column index
23+
i - iterator
24+
*/
25+
vector<int> v;
26+
//Spiral Form Order: (right->down->left->up->right->..->end)
27+
while (k < n && l < m){
28+
for (int i = l; i < m; ++i){//Right
29+
v.push_back( Mat[k][i]);
30+
}
31+
k++;
32+
for (int i = k; i < n; ++i){//Down
33+
v.push_back(Mat[i][m-1]);
34+
}
35+
m--;
36+
if (k < n)
37+
{
38+
for (int i = m-1; i >= l; --i){//left
39+
v.push_back(Mat[n-1][i]);
40+
}
41+
n--;
42+
}
43+
if (l < m)
44+
{
45+
for (int i = n-1; i >= k; --i){//up
46+
v.push_back( Mat[i][l]);
47+
}
48+
l++;
49+
}
50+
}
51+
return v;
52+
}
53+
int main()
54+
{
55+
int m,n,i,j=0;
56+
cin>>n>>m;
57+
vector<vector<int>> Mat;
58+
for(i=0;i<n;i++){
59+
vector<int>a;
60+
for(j=0;j<m;j++){
61+
int v;
62+
cin>>v;
63+
a.push_back(v);
64+
}
65+
Mat.push_back(a);
66+
}
67+
vector<int> ans=SpiralOrder(Mat,n,m);
68+
for(auto x:ans){
69+
cout<<x<<" ";
70+
}cout<<endl;
71+
return 0;
72+
}
73+
//Time Complexity: O(M*N). To traverse the matrix O(m*n) time is required.

0 commit comments

Comments
 (0)