N*N矩阵的旋转 不开辟新空间

/*

   N*N矩阵的旋转

   不开辟新空间 

  programmer:qpz

  time:2014-11-09

*/

#include <iostream>

using namespace std;

//#define MAX 3

const int MAX=3;

class cou{

private:

int x;

int y;

char num[MAX][MAX];

public:

cou(){}

cou(char num[MAX][MAX]);

void Prin(void);

void rotate(void);

}; 

void Init(char a[MAX][MAX],int n,int m);

int main(void)

{

char arr[MAX][MAX],time;

Init(arr,MAX,MAX);

cou Matrix;

Matrix=cou(arr);

    Matrix.Prin();

    cout<<"请输入旋转几次:"<<endl;

cin>>time;

time=time%4;

while(time--){

Matrix.rotate();

Matrix.Prin();

return 0;

}/*end main*/

void Init(char a[MAX][MAX],int n,int m)

{

int i,j;

cout<<"请输入矩阵3*3"<<endl; 

for(i=0;i<n;i++){

for(j=0;j<m;j++){

cin>>a[i][j];

}/*end for*/

}/*end for*/

}/*end Init*/

cou::cou(char num[MAX][MAX])

{

for(x=0;x<MAX;x++){

for(y=0;y<MAX;y++){

this->num[x][y]=num[x][y];

}/*end for*/

}/*end for*/

}/*end cou()*/

void cou::Prin(void)

{

for(int i=0;i<MAX;i++){

for(int j=0;j<MAX;j++){

cout<<num[i][j];

}/*end for*/

cout<<endl;

}/*end for*/

}/*end Prin()*/

void cou::rotate(void)

{

    //cout<<"首先行列互换"<<endl;

for(x=0;x<MAX;x++){

for(y=1+x;y<MAX;y++)

{

num[x][y]=num[x][y]^num[y][x];

num[y][x]=num[x][y]^num[y][x];

num[x][y]=num[x][y]^num[y][x];

} /*end for*/

}/*end for*/

//Prin();

//cout<<endl<<"然后进行左右互换"<<endl;

for(x=0;x<MAX;x++){

for(y=0;y<MAX/2;y++){

num[x][y]=num[x][y]^num[x][MAX-y-1];

num[x][MAX-y-1]=num[x][y]^num[x][MAX-y-1];

num[x][y]=num[x][y]^num[x][MAX-y-1];

} /*end for*/

}/*end for*/

//Prin();

原文地址:https://www.cnblogs.com/pzqu/p/9457677.html