矩阵的螺旋式遍历算法

生成一个螺旋矩阵,对任意给定的N,将1到N×N的数字从左上角第一个格子开始,按顺时针方向顺序填入N×N的矩阵里。

输入格式:在一行中给出一个整数N
输出格式:输出N×N的螺旋方针,每行N个数字,每个数字占3位

#include <stdio.h>
#include <stdlib.h>

void Fill(int *matN, int N, int n, int a, int c)
{
    int i, j;

    //填充外层一圈
    for (i = n, j = n; j < a; j++)
        matN[i + N * j] = ++c;
    for (j--, i++; i < a; i++)
        matN[i + N * j] = ++c;
    for (i--, j--; j >= n; j--)
        matN[i + N * j] = ++c;
    for (j++, i--; i > n; i--)
        matN[i + N * j] = ++c;

    if (a > 2) //递归填充内部
        Fill(matN, N, n + 1, a - 1, c);
}

int main()
{
    //分配空间
    int N, i, j;
    scanf("%d", &N);
    int *matN = malloc(N * N * sizeof(int));

    //填充矩阵
    Fill(matN, N, 0, N, 0);

    //输出
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            printf("%3d", matN[i + N * j]);

        printf("\n");
    }
}

clang-1000.11.45.5编译器测试通过.


JunDao

CAlgorithm

300 Words

2019-01-18 11:08 +0800