给一个整数 N,生成一个 N*N 的矩阵,矩阵中元素取值为1-N2, 1 在左上 角,其余各数按顺时针方向旋转前进

,依次递增放置,如 N=4,则生成矩阵 如下
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
要求输入 N,输出矩阵
C语言编程的哦

算法为边走边看能否继续前行,如果不能前行,就右转弯
#include<stdio.h>
#include<stdlib.h>
main()
{
int **a,i,j,x,y,n;
printf("input the N:");
scanf("%d",&n);
a = (int**) malloc(sizeof(int*)*n);
for(i=0; i<n; i++)
a[i]=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)for(j=0;j<n;j++)
a[i][j]=0;

for(i=1,j=x=y=0; i<=n*n; i++)
{
a[x][y]=i;
switch (j) /*j 为前进方向,0向右,1向下,2向左,3向上。*/
{
case 0:
if(y+1>n-1|| a[x][y+1]!=0) {j=1;x++;} else y++;
break;
case 1:
if(x+1>n-1 || a[x+1][y]!=0){j=2;y--;} else x++;
break;
case 2:
if(y-1<0 || a[x][y-1]!=0){j=3; x--;} else y--;
break;
case 3:
if(a[x-1][y]!=0){j=0; y++;} else x--;
break;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d ",a[i][j]);
printf("\n");
free(a[i]);
}
free(a);
system("pause");
}追问

你用的是指针的吧,虽然我看不懂,但是能够运行,要是只用数组的就好了有用

追答

你的题目是“给一个正整数N,生成 N*N 的矩阵”这题意要求的是动态生成的。所以我只好这么做。

其实算法很简单。你可以把N*N的矩阵看成是个迷宫,x,y表示你走到的坐标,向右走就是由x,y走到x,y+1 向下走就是由x,y 走到x+1,y 同理向上走和向左走。明白了?

比如3阶矩阵,走的全路程为a[0][0]->a[0][1]->a[0][2]->到边了转向下->a[1][2]->a[2][2]->到边了转向左->a[2][1]->a[2][0]->到边了转向上->a[1][0]->下一个a[0][0]已经走过了转向右->a[1][1]->全走完了。
每走一步赋一个值而已。

简单吧。

至于你硬是不想要动态数组,那可以定一个足够大的二维数组,比如int a[20][20]; 把我程序前面的分配空间的部分删了,就行了。

把这个理解了后,拿去交差,估计你的同学们都会仰视你的。

温馨提示:答案为网友推荐,仅供参考