Chinaunix首页 | 论坛 | 博客
  • 博客访问: 832525
  • 博文数量: 157
  • 博客积分: 542
  • 博客等级: 中士
  • 技术积分: 1696
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-21 20:21
文章分类
文章存档

2017年(1)

2016年(2)

2015年(6)

2014年(42)

2013年(77)

2012年(19)

2011年(10)

分类: C/C++

2013-09-24 14:04:04

有关矩正旋转的算法主要是自己先实践了几次,从最简单的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:


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <malloc.h>

  3. void main()

  4. {
  5.     char **p;
  6.     int i,j,n,a;
  7.     printf("请输入n*n矩阵的n值:");
  8.     scanf("%d",&n);
  9.     getchar();
  10.     p = (char**)malloc(n*sizeof(char*));
  11.     for(i=0;i<n;i++)
  12.     {
  13.         p[i] = (char*)malloc(n*sizeof(char));
  14.         for(j=0;j<n;j++)
  15.         {
  16.             p[i][j] = getchar();
  17.         }
  18.         getchar();        //换行输入,去掉回车符的影响
  19.     }    //动态分配n*n的数组空间,并逐行输入字符串
  20.     
  21.     for(i=0;i<n;i++)
  22.     {
  23.         for(j=0;j<n;j++)
  24.         {
  25.             printf("%c",p[i][j]);
  26.         }
  27.         printf("\n");
  28.     }

  29.     printf("请输入选择方向\n1.顺时针\n2.逆时针\nmake your choice!    (1 or 2)\n");
  30.     scanf("%d",&a);
  31.     switch(a)
  32.     {
  33.     case 1:
  34.         printf("顺时针旋转90后的矩阵为: \n");
  35.         for(i=0; i<n; ++i)
  36.         {
  37.             for(j=0; j<n; ++j)
  38.                 printf("%c ", p[n-1-j][i]);
  39.             printf("\n");
  40.         }
  41.         break;
  42.     case 2:
  43.         printf("逆时针旋转90后的矩阵为: \n");
  44.         for(i=0; i<n; ++i)
  45.         {
  46.             for(j=0; j<n; ++j)
  47.                 printf("%c ",p[j][n-1-i] );
  48.             printf("\n");
  49.         }
  50.         break;
  51.     default:
  52.         printf("input error!\n");
  53.         break;
  54.     }

  55.     //记得free掉 申请的空间
  56. }

 
        
          
阅读(532) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~