You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于C语言螺旋填充N阶方阵时方向数组顺序的技术问询

螺旋方阵填充问题:方向数组解析与代码修复

咱们一步步拆解你的问题,先搞清楚方向数组的设计逻辑,再找出代码输出不符合预期的核心原因。

一、为什么方向数组的第一个元素是{0, 1}?

首先明确坐标规则:这里x代表行索引,y代表列索引,map[x][y]对应第x行第y列的元素。

题目要求的填充顺序是「左到右→向下→右到左→向上」,对应坐标变化逻辑:

  • 左到右:行不动,列依次增加 → x不变,y+1 → 对应方向{0, 1}
  • 向下:列不动,行依次增加 → x+1,y不变 → 对应方向{1, 0}
  • 右到左:行不动,列依次减少 → x不变,y-1 → 对应方向{0, -1}
  • 向上:列不动,行依次减少 → x-1,y不变 → 对应方向{-1, 0}

你设想的方向顺序是反向的,会导致填充逻辑完全颠倒,不符合题目要求。所以原代码里的方向数组顺序是完全正确的。

二、你的代码输出异常的核心原因

看你的输出结果,中间层元素被覆盖成1、2、3、4,这是因为**number的初始化位置错误**:你把int number = 1;放在了层循环for (layer=0; ...)内部,导致每处理一层,计数就从1重新开始,直接覆盖了内层已填充的数值。

除此之外,赋值和移动的顺序混乱,导致初始点被重复赋值,进一步加剧了数值覆盖问题。

三、修复后的代码

下面是修正后的代码,我调整了number的位置,同时优化了赋值逻辑,避免重复赋值:

#include <stdio.h>
#define N 4
int main(void){
    int map[N][N];
    // 方向数组顺序正确,对应左到右→向下→右到左→向上
    int dirs[4][2] = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} };
    int number = 1; // 计数变量移到层循环外,保证全局递增
    for (int layer=0; layer < (N+1)/2; layer++){
        int x = layer, y = layer;
        int current_len = N - layer * 2; // 当前层的边长
        
        // 处理奇数N的最内层单个元素
        if (current_len == 1) {
            map[x][y] = number;
            break;
        }

        // 先给当前层起点赋值
        map[x][y] = number++;
        // 遍历四个方向填充当前层
        for (int dir=0; dir < 4; dir ++){
            // 最后一个方向(向上)少走一步,避免回到起点重复赋值
            int steps = (dir == 3) ? current_len - 2 : current_len - 1;
            for (int i=0; i < steps; i++){
                // 先移动到下一个位置,再赋值
                x += dirs[dir][0];
                y += dirs[dir][1];
                map[x][y] = number++;
            }
        }
    }

    // 打印结果
    printf("Final map is: \n");
    for (int i = 0; i < N; i++){
        for (int j = 0; j < N; j++){
            printf("%4d ", map[i][j]);
        }
        printf("\n");
    }
    return 0;
}

四、修复后的输出

运行修正后的代码,N=4时的正确输出为:

Final map is:
   1    2    3    4 
  12   13   14    5 
  11   16   15    6 
  10    9    8    7 

完全符合螺旋填充的预期逻辑。


内容的提问来源于stack exchange,提问作者Jorge Ávila Balmaceda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:43:16