C语言生成螺旋矩阵2
2014-11-13 22:44
127 查看
#include<stdio.h> #include<malloc.h> int main() { int **p=NULL; int n,i,j,k=1,line,row,temp; printf("请输入矩阵的行数:"); scanf("%d",&n); if((p=(int**)malloc(sizeof(int**)*n))==NULL)//根据行数分配内存,分配双指针 { printf("不能分配内存!!!\n"); return 1; } for(i=0;i<n;i++) { if((p[i]=(int*)malloc(sizeof(int*)*n))==NULL)//为每一行分配指针,每一行有n个数 { printf("不能分配内存!!!\n"); return 1; } } //螺旋矩阵思想是:随着k的增大,矩阵最外围先被幅值,最外面一圈赋值完成后,再向里面一层赋值,如此循环 //所以可以按照这个思想,每转一圈为一个大循环,一直循环下去,直至k<=n*n; for(i=0,j=0;k<=n*n;i++,j++) { for(row=j;row<n-j;row++) { p[i][row]=k++; } for(line=i+1;line<n-i;line++) { p[line][n-j-1]=k++; } for(row=n-j-2;row>=j;row--) { p[n-i-1][row]=k++; } for(line=n-i-2;line>i;line--) { p[line][j]=k++; } } if(n%2!=0) { for(i=0;i<n;i++) { for(j=0;j<(n-1)/2;j++) { temp=p[i][j]; p[i][j]=p[i][n-j-1]; p[i][n-j-1]=temp; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { p[i][j]=n*n+1-p[i][j]; } } } else { for(j=0;j<n;j++) { for(i=0;i<n/2;i++) { temp=p[i][j]; p[i][j]=p[n-i-1][j]; p[n-i-1][j]=temp; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { p[i][j]=n*n+1-p[i][j]; } } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%-6d",p[i][j]); } printf("\n"); } for(i=0;i<n;i++)//分别释放每一行的指针 { free(p[i]); p[i]=NULL; } free(p);//释放双指针 p=NULL; return 0; }
相关文章推荐
- C语言随机数生成的线程无关性
- C语言生成Bezier曲线程序
- C语言 EAN13 条形码生成【bmp生成】
- Linux Unicode 编程--C语言如何使用/生成UTF-8编码格式的文件
- POJ1258 Agri-Net 最小生成树 C语言
- 生成素数 筛选法 C语言
- C语言伪随机数生成
- 邻接表生成模型实现文件C语言
- random.c之随机数字生成C语言源代码欣赏
- 一个UUID生成算法的C语言实现 --- WIN32版本
- 生成UUID算法的C语言实现-win32版本
- C语言对通讯数据包生成校验码的例子
- 生成A-B之间随机数函数(含A,B)C语言
- C语言算法之最小耗费生成树
- 一个UUID生成算法的C语言实现 --- WIN32版本
- C语言对通讯数据包生成校验码的例子
- 最小生成树kruskal算法并查集版 C语言实现
- C语言中伪随机数生成方法
- POJ2485 Highways 最小生成树 C语言
- 【转】关于C语言生成不重复的随机数