螺旋矩阵 2018-09-07

今天偶然翻出了初学编程时候写的一个螺旋矩阵算法,看到一个大循环嵌套四个小循环的时候,立时觉得设计不良。经过改进之后,以 i j 变量指示方向,使得循环统一为一个。

如下便是一个螺旋矩阵,一眼就能知道怎么回事了

   1   2   3   4   5
  16  17  18  19   6
  15  24  25  20   7
  14  23  22  21   8
  13  12  11  10   9

下面是C源码

#include "stdio.h"

int main()
{
    int a[100][100] = {0},
        i = 0, j = 1, x = 1, y = 0, k = 0, n = 0, m = 0, end;
    int direction[4][2] = {0, 1, 1, 0, 0, -1, -1, 0};
    printf("Enter a number (<20):");
    scanf("%d", &n);
    end = n * n;
    a[1][n + 1] = a[n + 1][n] = a[n][0] = -1;
    a[x][y] = 0;

    while (1)
    {
        if (end == a[x][y])
            break;
        if (a[x + i][y + j] == 0)
        {
            a[x + i][y + j] = a[x][y] + 1;
            x += i;
            y += j;
        }
        else
        {
            k = (k + 1) % 4;
            i = direction[k][0];
            j = direction[k][1];
        }
    }
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
            printf("%4d", a[i][j]);
        printf("\n");
    }
}
    原文作者:陈zhih
    原文地址: https://www.jianshu.com/p/b223aa5d9c5c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞