题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
#include <iostream>
#include <vector>
using namespace std;
vector<int> printMatrix(vector<vector<int> > matrix){
bool m=true;
vector<vector<int> > vec;
vector<int> r;
vec=matrix;
for(int i=0;i<vec.size();i++)
for(int j=0;j<vec[i].size();j++)
vec[i][j]=0;
int x=0,y=0;
int h=vec.size();
int w=vec[0].size();
while(m){
m=false;
for(;y<w;y++){ //向左查找
if(vec[x][y]==1)
break;
r.push_back(matrix[x][y]);
vec[x][y]=1;
m=true;
}
y--; //向下查找
x++;
for(;x<h;x++){
if(vec[x][y]==1)
break;
r.push_back(matrix[x][y]);
vec[x][y]=1;
m=true;
}
x--; //向右查找
y--;
for(;y>=0;y--){
if(vec[x][y]==1)
break;
r.push_back(matrix[x][y]);
vec[x][y]=1;
m=true;
}
x--; //向上查找
y++;
for(;x>=0;x--){
if(vec[x][y]==1)
break;
r.push_back(matrix[x][y]);
vec[x][y]=1;
m=true;
}
x++;
y++;
}
return r;
}
int main(){
int a1[4]={1,2,3,4};
int a2[4]={5,6,7,8};
int a3[4]={9,10,11,12};
int a4[4]={13,14,15,16};
vector<int> vec1(a1,a1+4);
vector<int> vec2(a2,a2+4);
vector<int> vec3(a3,a3+4);
vector<int> vec4(a4,a4+4);
vector<vector<int> > matrix;
matrix.push_back(vec1);
matrix.push_back(vec2);
matrix.push_back(vec3);
matrix.push_back(vec4);
printMatrix(matrix);
system("pause");
}