顺时针打印矩阵
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;
}
浙公网安备 33010602011771号