一、今天说的是哪种蛇形矩阵
蛇形矩阵有多种,今天说的是下面这种回形的蛇形矩阵。
如4x4的回形蛇形矩阵
如5x5的回形蛇形矩阵
通过分析发现,这种矩阵,在走一圈以后又变成一个小2个的矩阵,如5x5的矩阵,从1、2、3。。。到14、15、16一圈后,变成了3x3的矩阵,因此可以使用递归的方式来解决这个问题。
二、蛇形矩阵的递归实现
1.走一圈需要4个循环
1)分别是向下走n次(nxn的矩阵)
2)向左走n-1次
3)向上走n-1次
4)向右走n-2次
2.如果n是奇数,如7,递归时分别是7-2=5,5-2=3,3-2=1,然后结束
如果n是偶数,如8,递归时分别是8-2=6,6-2=4,4-2=2,然后结束
因此分别需要写出n=2、n=1时矩阵的输出方法
3.通过以上分析,写出以下蛇形矩阵的函数
//s:蛇形矩阵,start:矩阵开始值,n:nxn的蛇形矩阵,posi:开始的行号,posj:开始的列号
void Matrix(int **s,int start,int n,int posi,int posj)
{
int i;//n=1,最简单
if(n==1) {s[posi][posj]=start;return;}
else if(n==2) //n=2时,有4个元素
{
s[posi][posj]=start;
posi++;
s[posi][posj]=start+1;
posj--;
s[posi][posj]=start+2;
posi--;
s[posi][posj]=start+3;
}
else
{
for(i=0;i
三、蛇形矩阵函数的调用
int main()
{
printf("请输入nxn蛇形矩阵的数目n:\n");
int i,j,n;
int **s;
scanf("%d",&n);
s=(int **)malloc(n*sizeof(int *));
for(i=0;i
一个int哦,不知道怎么跑出2个int了