Spiral_Matrix.cpp
parent
70e71a7718
commit
46482f958f
|
@ -0,0 +1,73 @@
|
|||
//Problem: Given an m x n matrix, return all elements of the matrix in spiral order.
|
||||
/*
|
||||
Input:
|
||||
n=3 m=3
|
||||
Matriz:
|
||||
2 3 5
|
||||
19 23 7
|
||||
17 13 11
|
||||
Output:
|
||||
vector => 2 3 5 7 11 13 17 19 23
|
||||
*/
|
||||
#include <iostream>
|
||||
#include<vector>
|
||||
#include<cmath>
|
||||
using namespace std;
|
||||
vector<int> SpiralOrder(vector<vector<int>> Mat,int n,int m) {
|
||||
int val = 0,a[n][m];
|
||||
int k = 0, l = 0;
|
||||
/* k - starting row index
|
||||
n - ending row index
|
||||
l - starting column index
|
||||
m - ending column index
|
||||
i - iterator
|
||||
*/
|
||||
vector<int> v;
|
||||
//Spiral Form Order: (right->down->left->up->right->..->end)
|
||||
while (k < n && l < m){
|
||||
for (int i = l; i < m; ++i){//Right
|
||||
v.push_back( Mat[k][i]);
|
||||
}
|
||||
k++;
|
||||
for (int i = k; i < n; ++i){//Down
|
||||
v.push_back(Mat[i][m-1]);
|
||||
}
|
||||
m--;
|
||||
if (k < n)
|
||||
{
|
||||
for (int i = m-1; i >= l; --i){//left
|
||||
v.push_back(Mat[n-1][i]);
|
||||
}
|
||||
n--;
|
||||
}
|
||||
if (l < m)
|
||||
{
|
||||
for (int i = n-1; i >= k; --i){//up
|
||||
v.push_back( Mat[i][l]);
|
||||
}
|
||||
l++;
|
||||
}
|
||||
}
|
||||
return v;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
int m,n,i,j=0;
|
||||
cin>>n>>m;
|
||||
vector<vector<int>> Mat;
|
||||
for(i=0;i<n;i++){
|
||||
vector<int>a;
|
||||
for(j=0;j<m;j++){
|
||||
int v;
|
||||
cin>>v;
|
||||
a.push_back(v);
|
||||
}
|
||||
Mat.push_back(a);
|
||||
}
|
||||
vector<int> ans=SpiralOrder(Mat,n,m);
|
||||
for(auto x:ans){
|
||||
cout<<x<<" ";
|
||||
}cout<<endl;
|
||||
return 0;
|
||||
}
|
||||
//Time Complexity: O(M*N). To traverse the matrix O(m*n) time is required.
|
Loading…
Reference in New Issue