题目概述
代码实现
//打印单独的一圈
void PrintCricle(int matrix[], int columns, int rows, int start)
{
//定义结束的坐标
int EndX = columns - start;
int EndY = rows - start;
//从左向右进行打印,需要对其X坐标
for (int j = start; j < EndX; ++j)
{
int num = matrix[start*rows+j];
cout << num << " ";
}
//从上向下进行打印,需要对其Y坐标
//第二步的执行条件是,终止的行号要大于起始的行号
if (start<EndY - 1)
{
for (int i = start + 1; i < EndY; ++i)
{
int num = matrix[i*columns + EndX - 1];
cout << num << " ";
}
}
//从右向左进行打印
//至少需要两行两列
if (start < EndX&&start<EndY)
{
for (int j = EndX - 2; j > start; --j)
{
int num = matrix[(EndY - 1)*columns + j];
cout << num << " ";
}
}
//从下往上进行打印
//至少需要三行两列
if (start < EndX - 1 && start<EndY - 1)
{
for (int i = EndY - 1; i > start; --i)
{
int num = matrix[i*columns + start];
cout << num << " ";
}
}
cout<<endl;
}
//调用上面的函数
void PrintMatrix(int matrix[], int columns, int rows)
{
if (matrix == NULL || columns <= 0 || rows <= 0)
return;
int start = 0;
while (columns > start * 2 && rows > start * 2)
{
PrintCricle(matrix, columns, rows, start);
++start;
}
}