有关矩正旋转的算法主要是自己先实践了几次,从最简单的2*2矩正,然后到3*3矩正(一般只要用到这个矩正推导就行了)一步一步推导出来的。
总结:
比如矩正是X*X。使用n表示行,m表示列。
则对于X*X矩正旋转公式:
顺时针 90度 :
a[n][m] = a[x-1-m][n];
逆时针 90度:
a[n][m] = a[m][x-1-n];
还有就是顺时针180度和逆时针180度:
逆时针180度是:a[n][m] = a[x-1-n][x-1-m];
顺时针180度是:a[n][m] = a[x-1-n][x-1-m];
两个是一样的.
下面贴下摘的code:
-
#include <stdio.h>
-
#include <malloc.h>
-
-
void main()
-
-
{
-
char **p;
-
int i,j,n,a;
-
printf("请输入n*n矩阵的n值:");
-
scanf("%d",&n);
-
getchar();
-
p = (char**)malloc(n*sizeof(char*));
-
for(i=0;i<n;i++)
-
{
-
p[i] = (char*)malloc(n*sizeof(char));
-
for(j=0;j<n;j++)
-
{
-
p[i][j] = getchar();
-
}
-
getchar(); //换行输入,去掉回车符的影响
-
} //动态分配n*n的数组空间,并逐行输入字符串
-
-
for(i=0;i<n;i++)
-
{
-
for(j=0;j<n;j++)
-
{
-
printf("%c",p[i][j]);
-
}
-
printf("\n");
-
}
-
-
printf("请输入选择方向\n1.顺时针\n2.逆时针\nmake your choice! (1 or 2)\n");
-
scanf("%d",&a);
-
switch(a)
-
{
-
case 1:
-
printf("顺时针旋转90后的矩阵为: \n");
-
for(i=0; i<n; ++i)
-
{
-
for(j=0; j<n; ++j)
-
printf("%c ", p[n-1-j][i]);
-
printf("\n");
-
}
-
break;
-
case 2:
-
printf("逆时针旋转90后的矩阵为: \n");
-
for(i=0; i<n; ++i)
-
{
-
for(j=0; j<n; ++j)
-
printf("%c ",p[j][n-1-i] );
-
printf("\n");
-
}
-
break;
-
default:
-
printf("input error!\n");
-
break;
-
}
-
-
//记得free掉 申请的空间
-
}
阅读(521) | 评论(0) | 转发(0) |