C语言将原来的矩阵顺时针旋转
2014-11-14 20:22
1001 查看
#include<stdio.h> #include<malloc.h> int main() { int n,i,j,k,temp1,temp2,line,row; int **p=NULL; printf("请输入矩阵维数:"); scanf("%d",&n); if((p=(int**)malloc(sizeof(int*)*(n+1)))==NULL) { printf("分配内存失败!!!\n"); return 1; } for(i=0;i<n;i++) { if((p[i]=(int*)malloc(sizeof(int)*(n+1)))==NULL) { printf("分配内存失败!!!\n"); return 1; } } for(i=0,k=1;i<n;i++) { for(j=0;j<n;j++) { p[i][j]=k++; } } printf("初始矩阵\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%-4d",p[i][j]); } printf("\n"); } //把矩阵旋转的思路就是每次旋转最外面的一圈,直至旋转至最内层 for(i=0,j=0,k=1;k<=n*n;i++,j++) { temp1=p[i+1][j];//用temp1保存将要被赋值的那个位置的数值,防止这个位置的数值被赋值后,原数据丢失 for(row=j;row<n-j;row++,k++)//最外面一层上面的行赋值 { temp2=p[i][row]; p[i][row]=temp1; temp1=temp2; } for(line=i+1;line<n-i;line++,k++)//最外面一层右面的列赋值 { temp2=p[line][n-j-1]; p[line][n-j-1]=temp1; temp1=temp2; } for(row=n-j-2;row>=j;row--,k++)//最外面的一层下面的行赋值 { temp2=p[n-i-1][row]; p[n-i-1][row]=temp1; temp1=temp2; } for(line=n-i-2;line>=i+1;line--,k++)//最外面的一层左面的列赋值 { temp2=p[line][j]; p[line][j]=temp1; temp1=temp2; } } if(n%2!=0)//假如是奇数阶矩阵,最中心的一个数要赋值 p[(n-1)/2][(n-1)/2]=temp1; printf("旋转之后的矩阵\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%-4d",p[i][j]); } printf("\n"); } for(i=0;i<n;i++) { free(p[i]); p[i]=NULL; } free(p); p=NULL; return 0; }
相关文章推荐
- 【重构】人人都来写算法 之 矩阵顺时针旋转90度,空间效率O(1),时间效率O(n*n)
- 矩阵顺时针旋转90度
- M*N矩阵顺时针旋转90度
- 北大OJ百练——4075:矩阵旋转(C语言)
- 矩阵旋转——(c语言)
- 【矩阵】矩阵顺时针旋转
- JAVA代码—算法基础:将N*N的矩阵顺时针旋转90度输出元素
- 把矩阵顺时针旋转90度
- 北大OJ百练——4075:矩阵旋转(C语言)
- 矩阵旋转——(c语言)
- Rotate Image,N*N矩阵顺时针旋转90度
- 顺时针旋转矩阵
- 由外向内顺时针&逆时针旋转矩阵
- 每天一道LeetCode-----顺时针旋转n×n矩阵90度
- Java --随意输入N*N矩阵, 顺时针旋转输出
- 编程题(顺时针旋转矩阵)
- 顺时针旋转矩阵
- 顺时针旋转打印n阶矩阵(内测第0届第4题)
- 每日一练-----顺时针旋转矩阵
- nowcoder-顺时针打印矩阵-模拟魔方逆时针旋转