标签:矩阵 inf 图片 条件 ima mes span top style
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵,则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
把矩阵看成由若干个顺时针方向的圈组成,循环打印矩阵中的每个圈,每次循环打印一个圈。
打印一圈通常分为四步,设置四个变量left,right,top,botm,用于表示圈的方位,每一步根据起始坐标和终止坐标循环打印。
注意:最后一圈有可能不需要四步,有可能只有一行,只有一列,只有一个数字,因此我们要仔细分析打印每一步的前提条件
#include <iostream> #include <vector> #include <fstream> #define N 4 using namespace std; class Solution { public: void print_matrix_cricle(const vector<vector<int> > &v); }; void Solution::print_matrix_cricle(const vector<vector<int> > &v) { if(v.empty()) return; int cols=v[0].size(); int rows=v.size(); int top=0; int left=0; int right=cols-1; int botm=rows-1; while(top<=botm&&left<=right) { //圈的第一步 for(int i=left;i<=right;++i) cout<<v[top][i]<<" "; //圈的第二步 if(top<botm) for(int i=top+1;i<=botm;++i) cout<<v[i][right]<<" "; //圈的第三步 if(top<botm&&left<right) for(int i=right-1;i>=left;--i) cout<<v[botm][i]<<" "; //圈的第四步 if(top+1<botm&&left<right) for(int i=botm-1;i>=top+1;--i) cout<<v[i][left]<<" "; ++top; ++left; --right; --botm; } } int main() { ifstream in("1.txt"); vector<vector<int> > v(N,vector<int>(0)); for(int i=0;i<N;++i) { v[i].resize(N); for(int j=0;j<N;++j) in>>v[i][j]; } Solution s; s.print_matrix_cricle(v); return 0; }
标签:矩阵 inf 图片 条件 ima mes span top style
原文地址:https://www.cnblogs.com/tianzeng/p/10181811.html