顺时针打印矩阵
Q:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
A:注意判断转向和每次转向的临界。
四个转向:右->下,下->左,左->上,上->右
临界初始(矩阵为mxn):右临界为n-1,下临界为m-1,左临界为0,上临界为1
//定义四个方向 enum Direct {Left,Right,Up,Down}; void Func(int **matrix,int m,int n) { //初始增量为向右 int stepX=0; int stepY=1; Direct direct=Right; //初始范围,注意up为1而不为0 int rangeLeft=0; int rangeRight=n-1; int rangeUp=1; int rangeDown=m-1; //初始位置为第一个 int x=0,y=0; for(int i=0;i<m*n;++i) { cout <<matrix[x][y]<<" "; switch(direct) { case Left: { if(y>rangeLeft) y+=stepY; else { direct=Up; stepX=-1; x+=stepX; rangeLeft+=1; } break; } case Right: { if(y<rangeRight) y+=stepY; else { direct=Down; stepX=1; x+=stepX; rangeRight-=1; } break; } case Up: { if(x>rangeUp) x+=stepX; else { direct=Right; stepY=1; y+=stepY; rangeUp+=1; } break; } case Down: { if(x<rangeDown) x+=stepX; else { direct=Left; stepY=-1; y+=stepY; rangeDown-=1; } break; } default: break; } } cout <<endl; }