首页 > 代码库 > 螺旋数组

螺旋数组

#include<iostream>using namespace  std;//生成一个n*n维的螺旋数组,形式如下/*1  2  3  4  516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9*/void spiral_array(int **a,int n){    /*for (int i = 0; i < n; i++)    {        for(int j = 0; j < n; j++)            printf("%d  ",a[i][j]);        printf("\n");    }*/    int terminated = n/2;    int m = 1;    for (int i = 0; i < terminated; i++)    {        for (int j = 0; j < n-i; j++)        {            if (a[i][j] == 0)            {                a[i][j] = m++;            }        }        for (int j = i+1; j<n-i; j++)        {            if (a[j][n-i-1]==0)            {                a[j][n-i-1]=m++;            }        }        for (int j = n-i-1; j > i; j--)        {            if (a[n-i-1][j]==0)            {                a[n-i-1][j]=m++;            }        }        for (int j = n-i-1; j>i; j--)        {            if (a[j][i]==0)            {                a[j][i]=m++;            }        }        if (n%2==1)        {            a[terminated][terminated]=m;        }    }}int main(){    int **a;    int n;    printf("请输入数组的维数:");    scanf("%d",&n);    //二维数组动态内存分配    a = (int **)malloc(sizeof(int*)*n);    for (int i = 0; i < n; i++)    {        a[i] = (int *)malloc(sizeof(int)*n);        for(int j = 0; j < n; j++)            a[i][j] = 0;    }    spiral_array(a,n);    printf("螺旋数组:\n");    for (int i = 0; i < n; i++)    {        for(int j = 0; j < n; j++)            printf("%d  ",a[i][j]);        printf("\n");    }    //释放内存    for (int i = 0; i < n; i++)    {        free(a[i]);    }    free(a);    return 0;}