求救求救,一道c++水题,关于二维数组的,求大神代码谢谢!!!

2.蛇形螺旋矩阵
【问题描述】
大家一定都听说过蛇形矩阵,也一定都听说过螺旋矩阵,但一定没有听过
蛇形螺旋矩阵。所谓蛇形螺旋矩阵,是非常类似于螺旋矩阵的一种矩阵。它们
仅有的不同之处在于:螺旋矩阵总是按顺时针方向旋转并填入相应数字,而蛇
形螺旋矩阵每一圈的旋转方向是不固定的。
现在给出一个蛇形螺旋矩阵的大小,同时给出每一圈旋转的方向,请你制
作出这个矩阵。(特别说明:第 i 圈的旋转是从(i,i)处开始的。)
【输入格式】
第一行一个正整数 n,表示蛇形螺旋矩阵的边长。
第二行(n+1)/2 个整数,第 i 个数表示从外向内第 i 圈的旋转的方向。
1 表示顺时针方向,-1 表示逆时针方向。
【输出格式】
输出共 n 行,每行 n 个用空格隔开的正整数,第 i 行第 j 个整数表示这
个矩阵(i,j)处的应填的整数。
【样例输入】
7
1 -1 -1 1
【样例输出】
1 2 3 4 5 6 7
24 25 40 39 38 37 8
23 26 41 48 47 36 9
22 27 42 49 46 35 10
21 28 43 44 45 34 11
20 29 30 31 32 33 12
19 18 17 16 15 14 13
【数据规模和约定】
对于 50%的数据,1 ≤ n ≤ 100。对
于 100%的数据,1 ≤ n ≤ 1000。

#include <stdio.h>
#include <stdlib.h>

int n,value;
int **s=NULL;

void prt()
{
int i,j;
for(i=1;i<n-1;i++)
{
for(j=1;j<n-1;j++)
{
printf("%02d ",s[i][j]);
}
printf("\n");
}
}

void ssz(int k)
{
int i=k+1,j=k+1;
s[i][j]=value++;
while(1)
{
if(s[i][j+1]!=0)
{
break;
}
else
{
s[i][++j]=value++;
}
}
while(1)
{
if(s[i+1][j]!=0)
{
break;
}
else
{
s[++i][j]=value++;
}
}
while(1)
{
if(s[i][j-1]!=0)
{
break;
}
else
{
s[i][--j]=value++;
}
}
while(1)
{

if(s[i-1][j]!=0)
{
break;
}
else
{
s[--i][j]=value++;
}
}
}

void lsz(int k)
{
int i=k+1,j=k+1;
s[i][j]=value++;
while(1)
{
if(s[i+1][j]!=0)
{
break;
}
else
{
s[++i][j]=value++;
}
}
while(1)
{
if(s[i][j+1]!=0)
{
break;
}
else
{
s[i][++j]=value++;
}
}
while(1)
{
if(s[i-1][j]!=0)
{
break;
}
else
{
s[--i][j]=value++;
}
}
while(1)
{
if(s[i][j-1]!=0)
{
break;
}
else
{
s[i][--j]=value++;
}
}
}

int main()
{
scanf("%d",&n);
n+=2;
int i,j;
s=(int**)malloc(sizeof(int*)*n);
for(i=0;i<n;i++)
{
*(s+i)=(int*)malloc(sizeof(int)*n);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
s[i][j]=0;
}
}
for(i=0;i<n;i++)
{
s[i][0]=-1;
s[i][n-1]=-1;
}
for(j=0;j<n;j++)
{
s[0][j]=-1;
s[n-1][j]=-1;
}
int arrow;
fflush(stdin);
value=1;
for(i=0;i<(n-2+1)/2;i++)
{
scanf("%d",&arrow);
if(arrow==1)
{
ssz(i);
}
else if(arrow==-1)
{
lsz(i);
}
}
prt();
return 0;
}
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答