算法资源库(1)螺旋阵问题

118 阅读2分钟

一、 问题描述 

二、算法思想

  1. 首先创建一个空的n*n矩阵,将所有元素初始化为0。
  2. 定义边界变量,用来表示当前螺旋阵的上界、下界、左界和右界。
  3. 定义方向变量,用来表示当前遍历的方向,初始值为0,表示向右。
  4. 定义一个数字变量,初始值为1,用来表示当前填充的数字。
  5. 通过循环,按照指定的方向填充螺旋阵。每次遍历的终点都是边界中的一个点。
  6. 每个方向的遍历结束后,都需要更新对应的边界值,并将方向变量递增1,以切换到下一个方向。
  7. 最终得到填充完成的螺旋阵。

三、代码实现  

#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;
}

方法分析

       这种算法通过不断更新边界和方向来完成螺旋填充,直到所有的位置都被填充完毕。遍历过程中,每次按照当前方向填充数字的同时,还需要更新边界和方向,以确保下一次填充的方向正确。

执行结果

结语 

努力提升自己

让曾经瞧不起你的人刮目相看

!!!