矩阵的螺旋式遍历算法
生成一个螺旋矩阵,对任意给定的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编译器测试通过.