C语言二维数组螺旋填数算法及代码示例
C语言二维数组螺旋填数算法及代码示例
本文介绍如何使用C语言实现二维数组的螺旋填数算法,并提供完整的代码示例和详细的解释。
算法思路
螺旋填数算法的核心思想是按照顺时针方向,依次填充数组的 上行、右列、下行、左列,并在填充过程中不断缩小边界范围,直到所有数字都被填充完毕。
具体步骤如下:
- 定义四个变量
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语言实现二维数组螺旋填数的算法思路和代码示例,并对代码进行了详细的解释。希望本文能够帮助你理解和掌握这一经典算法。
原文地址: https://www.cveoy.top/t/topic/pQt 著作权归作者所有。请勿转载和采集!