/*
面試題20:順時針打印矩陣
*/
void PrintNumber(int number)
{
printf("%d ",number);
}
//一步一步打印矩陣
void PrintMatixInCircle(int** numbers,int columns,int rows,int start)
{
int endX = columns-1-start;
int endY = columns-1-start;
//從左到右打印一行
for(int i = start;i<=endX;i++)
{
int number = numbers[start][i];
PrintNumber(number);
}
//從上到下打印一列
if(start<endY)
{
for(int i = start+1;i<=endY;i++)
{
int number = numbers[i][endX];
PrintNumber(number);
}
}
//從右到左打印一行
if(start<endX &&start<endY)
{
for(int i = endX-1;i>=start;--i)
{
int number = numbers[endY][i];
PrintNumber(number);
}
}
//從下到上打印一列
if(start<endX &&start<endY-1)
{
for(int i = endY-1;i>=start+1;--i)
{
int number = numbers[i][start];
PrintNumber(number);
}
}
}
//打印矩陣
void PrintMatrixClockwisely(int** numbers,int columns,int rows)
{
if(numbers == 0||columns<0||rows == 0)
return ;
int start = 0;
while(columns>start*2 && rows>start*2)
{
PrintMatixInCircle(numbers,columns,rows,start);
++start;
}
}
int main()
{
int Matrix[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int **p = new int*[4];
for (int i=0; i<4; i++)
{
p[i] = Matrix[i];
}
PrintMatrixClockwisely(p,4,4);
return 0;
}