void Matrix(int n)
{
int row = 0, col = 0; // 当前位置所在的行列
int left = -1, right = n, top = -1, bottom = n; // 当前的边界
int irow = 0, icol = 1; // 当前的前进方向(初始时往右)
int arr[20][20];
for(int i=0; i<n*n; ++i)
{
arr[row][col] = i+1;
// 根据当前的前进方向获得下一个位置的行列号
row += irow;
col += icol;
if(col == right)
{
// 下一个位置是右边界时,往下。
irow = 1;
icol = 0;
// 此时,顶边界往下一格
top += 1;
// 改变下一个位置
row += 1;
col -= 1;
}
if(row == bottom)
{
// 下一个位置是底边界时,往左。
irow = 0;
icol = -1;
// 此时,右边界往左一格
right -= 1;
// 改变下一个位置
row -= 1;
col -= 1;
}
if(col == left)
{
// 下一个位置是左边界时,往上。
irow = -1;
icol = 0;
// 此时,底边界往上一格
bottom -= 1;
// 改变下一个位置
row -= 1;
col += 1;
}
if(row == top)
{
// 下一个位置是顶边界时,往右。
irow = 0;
icol = 1;
// 此时,左边界往右一格
left += 1;
// 改变下一个位置
row += 1;
col += 1;
}
}
for(i=0; i<n; ++i)
{
for(int j=0; j<n; ++j)
printf("%4d", arr[i][j]);
printf("\n");
}
printf("\n");
}
评论