File tree 1 file changed +73
-0
lines changed
1 file changed +73
-0
lines changed Original file line number Diff line number Diff line change
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.
You can’t perform that action at this time.
0 commit comments