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

本文介绍了一个不使用额外空间的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值