本文简单的实现了以螺旋方式遍历二维矩阵。
该例子可以对二维矩阵在逻辑上有了更深的认识,有需要的可以简单尝试,并在最后附上运行结果。
#include<iostream>
#include<vector>
using namespace std;
vector<int> SpiralTraversing(vector<vector<int>> &matrix)
{
vector<int> result;
//求出矩阵是m行n列
int m = matrix.size(); //m 行
int n = matrix[0].size(); //n 列
int top = 0,bottom = m-1;
int left = 0,right = n-1;
while(top<=bottom && left<=right)
{
//从左向右遍历上边界
for(int i = left;i<=right;i++)
{
result.push_back(matrix[top][i]);
}
top++;
//从上到下遍历右边界
for(int i = top;i<=bottom;i++)
{
result.push_back(matrix[i][right]);
}
right--;
//判断是否还有行与列
if(top<=bottom)
{
//从右向左遍历下边界
for(int i =right;i>=left;i--)
{
result.push_back(matrix[bottom][i]);
}
bottom--;
}
if(left<=right)
{
//从下向上遍历右边界
for(int i = bottom;i>=top;i--)
{
result.push_back( matrix[i][left]);
}
left ++;
}
}
return result;
}
void print(vector<int> &a)
{
int size = a.size();
for(int i = 0;i<size;i++)
{
cout<<a[i]<<" ";
}
}
int main()
{
vector<vector<int>> a = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
vector<int> aa = SpiralTraversing(a);
print(aa);
system("pause");
return 0;
}
结果如下所示: