这不是蛇形矩阵,而是回旋形矩阵代码,如下:

程序代码:
#include <stdio.h>
void right (int a);
void down(int a);
void left(int a);
void up(int a);
int a[30][30], i, j, k,l,n,m,x,y,o,p;
main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
x = n;
y = m;//用以判断是否结束及输出
o = n;
p = m;//用以计算赋值个数
i = 1;//用以赋值
j =0 ;
k = 0;//二维数组下标
right(i);//从right开始即可
}
}
void right(int i)
{
if (i <= x * y)
{
for (l = 0; l < m; l++, k++, i++) a[j][k] = i;
m -= 2; //下次用right时赋值个数将减少两个
k -= 1; //循环结束后,k多加了一个1,减回来
j += 1; //下个被赋值的数为本次赋值的最后一个数的左边第一个
down(i); //之后函数的操作类似,就不注释了
}
else
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
printf("%2d", a[i][j]);
if (j != y - 1) printf(" ");
}
printf("\n");
}
}
void down(int i)
{
if (i <= x * y)
{
for (l = 0; l < n-1; l++, j++, i++) a[j][k] = i;
n -= 2;
j -= 1;
k -= 1;
left(i);
}
else
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
printf("%2d", a[i][j]);
if (j != y - 1) printf(" ");
}
printf("\n");
}
}
void left(int i)
{
if (i <= x * y)
{
for ( l = 0; l < p-1; l++, k--, i++) a[j][k] = i;
p -= 2;
k += 1;
j -= 1;
up(i);
}
else
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
printf("%2d", a[i][j]);
if (j != y - 1) printf(" ");
}
printf("\n");
}
}
void up(int i)
{
if (i <= x * y)
{
for ( l = 0; l < o-2; l++, j--, i++) a[j][k] = i;
o-= 2;
j += 1;
k += 1;
right(i);
}
else
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
printf("%2d", a[i][j]);
if (j != y - 1) printf(" ");
}
printf("\n");
}
}