您的位置:首页 > 其它

顺时针打印矩阵

2016-10-05 17:52 211 查看
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.


这个像极了我们常见的一种旋转矩阵:

1 2 3 4

12 13 14 5

11 16 15 6

10 9 8 7

我的解题思路一贯的简单粗暴,既然是旋转的,那总离不了上下左右四个方向,大不了我就写复杂些,把你的所有旋转情况全部涵盖。

vector<int> printMatrix(vector<vector<int> > matrix)
{
size_t width = matrix[0].size();
size_t height = matrix.size();
vector<int> res;
int flags[height][width];
size_t i = 0;
size_t j = -1;
for(i = 0;i < height;++i)
{
for(j = 0; j < width; ++j)
flags[i][j] = 0;
}
enum DIR{DIR_UP,DIR_DOWN,DIR_LEFT,DIR_RIGHT} dir;
dir = DIR_RIGHT;
int count = 0;
i = 0, j = -1;
while(true)
{
switch(dir)
{
case DIR_UP:
res.push_back(matrix[--i][j]);
if(i == 0 || flags[i-1][j] == 1) dir = DIR_RIGHT;
break;
case DIR_DOWN:
res.push_back(matrix[++i][j]);
if(i+1 == height || flags[i+1][j] == 1) dir =DIR_LEFT;
break;
case DIR_LEFT:
res.push_back(matrix[i][--j]);
if(j == 0 || flags[i][j-1] == 1) dir = DIR_UP;
break;
case DIR_RIGHT:
res.push_back(matrix[i][++j]);
if(j+1 == width || flags[i][j+1] == 1) dir = DIR_DOWN;
break;
}
flags[i][j] = 1;
++count;
if(count == width * height) break;
}
return res;
}


粗暴得让我自己都汗颜!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  矩阵 旋转矩阵