顺时针输出矩阵

来源:互联网 发布:指针数组初始化 null 编辑:程序博客网 时间:2024/05/29 13:44
描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3

样例输出

7 8 16 9 25 4 3



*****************************************   相关  *********************************************

【剑指offer】顺时针打印矩阵:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.

classSolution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
  
        introw = matrix.size();
        intcol = matrix[0].size();
        vector<int> res;
        if(row == 0|| col == 0)  return res;   // 输入的二维数组非法,返回空的数组
        int left = 0, top = 0, right = col - 1, bottom = row - 1; // 定义四个关键变量,表示左上和右下的打印范围
        while(left <= right && top <= bottom)
        {
          for(int i = left; i <= right; ++i)      res.push_back(matrix[top][i]); // left to right
          for(int i = top + 1; i <= bottom; ++i)  res.push_back(matrix[i][right]);// top to bottom
          if(top != bottom)                                                      // right to left   
          for(int i = right - 1; i >= left; --i)  res.push_back(matrix[bottom][i]);
          if(left != right)                                                     // bottom to top
          for(int i = bottom - 1; i > top; --i)  res.push_back(matrix[i][left]);
            left++,top++,right--,bottom--;
        }
        return res;
    }
};


注意:1)for(int i=0;i<res.size(); i++)
  cout<<res[i];

          2)int M[101][101];
              for(int i=0; i<row; i++)
                  for(int j=0; j<col; j++)
                         cin>>M[i][j];

           3)vector<int> res;
 
int left=0, top=0, right= col-1, bottom = row-1;
while(left <= right && top <= bottom)
{
for(int i=left; i<=right; i++)             res.push_back(M[top][i]);
for(int i=top+1; i<=bottom; i++)     res.push_back(M[i][right]);

if(top!=bottom)
for(int i=right-1; i>=left; i--)   res.push_back(M[bottom][i]);

if(left!=right)
for(int i=bottom-1; i>top; i--) res.push_back(M[i][left]);

left++, top++, right--, bottom--;  
}

1 0
原创粉丝点击