顺时针打印矩阵

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;
}
posted @ 2012-07-16 10:13  Cavia  阅读(199)  评论(0编辑  收藏  举报