您的位置:首页 > 其它

顺时针打印矩阵

2012-07-16 10:13 148 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: