69,380
社区成员
发帖
与我相关
我的任务
分享
static int b = 0, c = 0, d = 1, e = 2, k = 1, p = 1;
int Snack(int **a, int b, int c, int x1, int y1, int row, int col ) //蛇形矩阵函数
{
if(k > row*col-1)
{
for( i = 0; i < row ; i++ )
for( j = 0 ; j < col ; j++ )
if(a[i][j]<0) //查找并对最后一个数据赋值
{a[i][j]=k;break;}
return 1;
}
else if(p == 1) //向右横行
{
for( ; c < y1-1 ; c++ )
{a[b][c] = k;k++;}
y1--;
p=2;
Snack( a,b, c, x1, y1, row, col );
}
else if( p == 2 ) //向下竖列
{
for( ; b<x1-1 ; b++ )
{a[b][c] = k;k++;}
x1--;
p=3;
Snack( a, b, c, x1, y1, row, col );
}
else if( p == 3 ) //向左横行
{
for( ; c >= d ; c-- )
{a[b][c] = k;k++;}
d++;
p=4;
Snack( a, b, c, x1, y1, row, col );
}
else //向上竖列
{
for( ; b >= e ; b-- )
{a[b][c] = k;k++;}
e++;
p=1;
Snack( a, b, c, x1, y1, row, col );
}
}
#include <stdio.h>
#define N 4
int arr[N][N];
int main(void)
{
int i,j,k,n;
i=j=k=0;
n=1;
for (k=0; k<N/2+1; k++) {
for (j=k; j<N-k;j++)
arr[k][j]=n++;
for (j=k+1; j<N-k;j++)
arr[j][N-k-1]=n++;
for (j=N-k-2; j>=k;j--)
arr[N-k-1][j]=n++;
for (j=N-k-2; j>k;j--)
arr[j][k]=n++;
}
for (i=0;i<N;i++) {
for (j=0;j<N;j++)
printf("%4d", arr[i][j]);
printf("\n");
}
return 0;
}