上次看到有人发螺旋矩阵 (奇偶通用)
自己写了个没有动态空间的 请问怎么弄成动态的 我想过用2维指针 但是遇到未初始大小无法定义的问题 下面代码有节省空间的余地吗#include <stdio.h>
#include <malloc.h>
char a[100][100]; //这里就是我想改进的地方 想弄成动态的 给个思路 老是碰到大小未确定而无法定义的问题
void main() // 而2维指针的动态大小如何用malloc来建立 而且如何设2维指针? *p[]无法通过
{
void fuzhi(int);
int n;
printf ("输入正方矩阵的边长:");
scanf ("%d",&n);
printf ("输出螺旋矩阵:\n");
fuzhi(n);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
{ printf ("%d ",a[i][j]);
if(j==n) printf ("\n");
}
}
void fuzhi (int n)
{
for (int i=1; i <= n; i++)
for (int j=1; j <= n; j++)
{
if (i == 1 || j ==1 || i == n || j== n ) //先把所有的边都负值为1
a[i][j] = 1;
else
{
if((i <= n/2)&&(j <= n/2)) //为左上角的块负值
i<=j ? a[i][j]= i : a[i][j]=j ;
else if((i >= n/2)&&(j <= n/2)) //为左下角的块负值
(n-i+1) <=j ? a[i][j]= n-i+1 : a[i][j]=j ;
else if((i <= n/2)&&(j >= n/2)) //为右上角的块负值
(n-j+1) <=i ? a[i][j]= n-j+1 : a[i][j]=i ;
else if((i >= n/2)&&(j >= n/2)) //为右下角的块负值
(n-i+1) <=(n-j+1) ? a[i][j]= n-i+1 : a[i][j]= n-j+1 ;
}
}
}
[ 本帖最后由 cqm9266 于 2012-3-9 21:22 编辑 ]