代码如下:
/*
蛇形(回形)矩阵的实现:
解题思路:
整体思路:每一圈的数值都是连续的,所以我们一圈一圈的赋值
对一圈的初始化:
1:设置(p,p)每一圈最左上角的坐标
(q,q)每一圈最右下角的坐标
2:对每一圈分四部(上,右,下,左)分别初始化
为了使这四步对称(赋值个数相同),按下图这样初始化
1的位置初始化--->上
2的位置初始化--->右
3的位置初始化--->下
4的位置初始化--->左
1 1 1 2
4 2
4 2
4 3 3 3
*/
#include<stdio.h>
#include<stdlib.h> //system
#define LENTH 100 //数组默认维数
void snack_matrix(int n)
{
int array[LENTH][LENTH] = {0};
int p = 0; //每一圈(正方形)最左上角坐标(p,p)
int q = n-1;//每一圈(正方形)最右下角坐标(q,q)
int num = 1;//数组中存放的值,存放一个后+1
int i;
while(p < q)
{ /*初始化----->上*/
for(i=p;i<q;++i)
{
array[p][i] = num;//行坐标不变,列坐标:p--->q-1
num++;
}
/*初始化----->右*/
for(i=p;i<q;++i)
{
array[i][q] = num;//列坐标不变,列坐标:p--->q-1
num++;
}
/*初始化----->下*/
for(i=q;i>p;--i)
{
array[q][i] = num;//行坐标不变,列坐标:q--->p+1
num++;
}
/*初始化----->左*/
for(i=q;i>p;--i)
{
array[i][p] = num;//列坐标不变,行坐标:q--->p+1
num++;
}
p++;//为下一个圈做准备
q--;
}
if(n%2 != 0) //维数是奇数,最中间一个得单独赋值(此时p=q)不进入while循环赋值
{
array[n/2][n/2] = num;
}
for(i=0;i<n;++i)
{
for(int j=0;j<n;++j)
{
printf("%d\t",array[i][j]);
}
printf("\n");//输满一行后换行
printf("\n");
}
}
int main()
{
system("mode con cols=100 lines=100");
system("color 0A");
int n;
printf("please input the size of matrix:\n");
scanf("%d",&n);
snack_matrix(n);
return 0;
}