数学编程 矩阵旋转

来源:互联网 发布:js校验文本框输入数字 编辑:程序博客网 时间:2024/06/01 08:53

将一个n*n的矩阵顺时针旋转90度,具体以3x3矩阵为例


下标对应关系,用(i,j)表示,自己捋一捋,很容易看出来,变换后的列下标,即j按行增加,故按列遍历,编写代码如下

void rotate(char a[200][200],int n){    char b[200][200];    int i,j;    for(j=0;j<n;++j)    {for(i=0;i<n;++i){            b[j][i]=a[n-i-1][j];        }    }for(i=0;i<n;++i){    for(j=0;j<n;++j)    {                a[i][j]=b[i][j];            }}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  }
或者按照正常变换格式,把所有的按行遍历

void rotate(char a[200][200],int n){char b[200][200];int i,j;    for(i=0;i<n;++i){for(j=0;j<n;++j){            b[i][j]=a[n-j-1][i];        }}for(i=0;i<n;++i){for(j=0;j<n;++j){            a[i][j]=b[i][j];        }}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  }

下面再转载一个网上的代码,用指针写的,感觉更加便捷

#include <iostream>  using namespace std;  const int M = 5;  const int N = 3;     int main()  {    int a[M][N] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};    int *p = a[0];       for(int i = 0;i < M;i++) // M = 5     {      for(int j = N-1;j >= 0;j--) // N = 3      {          cout << *(p + i + j*M) << ","; // M = 5;      }      cout << endl;    }      return 0;  }