一、 问题描述
二、算法思想
- 首先创建一个空的n*n矩阵,将所有元素初始化为0。
- 定义边界变量,用来表示当前螺旋阵的上界、下界、左界和右界。
- 定义方向变量,用来表示当前遍历的方向,初始值为0,表示向右。
- 定义一个数字变量,初始值为1,用来表示当前填充的数字。
- 通过循环,按照指定的方向填充螺旋阵。每次遍历的终点都是边界中的一个点。
- 每个方向的遍历结束后,都需要更新对应的边界值,并将方向变量递增1,以切换到下一个方向。
- 最终得到填充完成的螺旋阵。
三、代码实现
#include <stdio.h>
void printSpiralMatrix(int n)
{
int matrix[n][n];
int left = 0, right = n - 1, top = 0, bottom = n - 1;
int num = 1;
while (num <= n * n)
{
// 从左到右填充
for (int i = left; i <= right; i++)
{
matrix[top][i] = num;
num++;
}
top++;
// 从上到下填充
for (int i = top; i <= bottom; i++)
{
matrix[i][right] = num;
num++;
}
right--;
if (top <= bottom)
{
// 从右到左填充
for (int i = right; i >= left; i--)
{
matrix[bottom][i] = num;
num++;
}
bottom--;
}
if (left <= right)
{
// 从下到上填充
for (int i = bottom; i >= top; i--)
{
matrix[i][left] = num;
num++;
}
left++;
}
}
// 输出螺旋阵
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%-4d", matrix[i][j]);
}
printf("\n");
}
printf("end\n");
}
int main()
{
int n;
scanf("%d", &n);
printSpiralMatrix(n);
return 0;
}
方法分析
这种算法通过不断更新边界和方向来完成螺旋填充,直到所有的位置都被填充完毕。遍历过程中,每次按照当前方向填充数字的同时,还需要更新边界和方向,以确保下一次填充的方向正确。
执行结果
结语
努力提升自己
让曾经瞧不起你的人刮目相看
!!!