C语言二维数组螺旋填数算法及代码示例

本文介绍如何使用C语言实现二维数组的螺旋填数算法,并提供完整的代码示例和详细的解释。

算法思路

螺旋填数算法的核心思想是按照顺时针方向,依次填充数组的 上行、右列、下行、左列,并在填充过程中不断缩小边界范围,直到所有数字都被填充完毕。

具体步骤如下:

  1. 定义四个变量 rowStart, rowEnd, colStart, colEnd 分别表示当前要填充的行的起始和结束位置,以及列的起始和结束位置。2. 初始化 num = 1,表示要填充的数字。3. 使用循环结构,每次循环填充一层: - 从左到右填充上行 (array[rowStart][colStart]array[rowStart][colEnd]),填充完成后 rowStart++; - 从上到下填充右列 (array[rowStart][colEnd]array[rowEnd][colEnd]),填充完成后 colEnd--; - 从右到左填充下行 (array[rowEnd][colEnd]array[rowEnd][colStart]),填充完成后 rowEnd--; - 从下到上填充左列 (array[rowEnd][colStart]array[rowStart][colStart]),填充完成后 colStart++。4. 每次填充完一层后,判断 num 是否已经大于等于 n * n,如果是则表示填充完毕,跳出循环。

代码示例c#include <stdio.h>

#define MAX_SIZE 10

void fillSpiral(int n) { int array[MAX_SIZE][MAX_SIZE];

int num = 1;    int rowStart = 0, rowEnd = n - 1;    int colStart = 0, colEnd = n - 1;

while (num <= n * n) {        // 填充上行        for (int i = colStart; i <= colEnd; i++) {            array[rowStart][i] = num++;        }        rowStart++;

    // 填充右列        for (int i = rowStart; i <= rowEnd; i++) {            array[i][colEnd] = num++;        }        colEnd--;

    // 填充下行        for (int i = colEnd; i >= colStart; i--) {            array[rowEnd][i] = num++;        }        rowEnd--;

    // 填充左列        for (int i = rowEnd; i >= rowStart; i--) {            array[i][colStart] = num++;        }        colStart++;    }

// 打印填充后的数组    for (int i = 0; i < n; i++) {        for (int j = 0; j < n; j++) {            printf('%2d ', array[i][j]);        }        printf('

'); }}

int main() { int n; printf('请输入正方形矩阵的大小:'); scanf('%d', &n);

if (n > MAX_SIZE) {        printf('矩阵大小超过最大限制。

'); return 1; }

printf('螺旋填充后的二维数组:

'); fillSpiral(n);

return 0;}

代码解释

  • fillSpiral 函数用于实现螺旋填数的逻辑,该函数接收一个整数参数 n,表示要填充的正方形矩阵的大小。- MAX_SIZE 是一个宏定义,用于限制输入矩阵的最大大小,可以根据需要修改。- 在 main 函数中,首先读取用户输入的矩阵大小,然后调用 fillSpiral 函数进行螺旋填数,最后打印填充后的数组。

总结

本文介绍了使用C语言实现二维数组螺旋填数的算法思路和代码示例,并对代码进行了详细的解释。希望本文能够帮助你理解和掌握这一经典算法。

C语言二维数组螺旋填数算法及代码示例

原文地址: https://www.cveoy.top/t/topic/pQt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录