矩阵翻转90度

来源:互联网 发布:.net 数组包含 编辑:程序博客网 时间:2024/05/01 15:30

矩阵逆时针翻转90度:

假设矩阵中一数字坐标为(i,j),逆时针翻转后的坐标为(n-1-j,i),要实现这一过程,首先(i,j)->(j,i),即沿着左对角线将对角线两侧的数字交换,之后(j,i)->(n-1-j,i),即将矩阵沿着横中轴将上下行中的元素进行交换,如果是4*4矩阵,也就是交换1,4行和交换2,3行;

矩阵顺时针翻转90度:

假设矩阵中一数字坐标为(i,j),顺时针翻转后的坐标为(j,n-1-i),要实现这一过程,首先(i,j)->(j,i),即沿着左对角线将对角线两侧的数字交换,之后(j,i)->(j,n-1-i),即将矩阵沿着纵中轴将左右列中的元素进行交换,如果是4*4矩阵,也就是交换1,4列和交换2,3列;

#include <iostream>using namespace std;void swap(int &a, int &b){int temp;temp = a;a = b;b = temp;}void ni_fanzhuan(int a[][4], int n)//逆时针翻转90度{int i,j;for(i=0;i<n;i++){for(j=i+1;j<n;j++)swap(a[i][j],a[j][i]);}for(i=0;i<n/2;i++)//注意这是i,即交换行{for(j=0;j<n;j++)swap(a[i][j],a[n-1-i][j]);}cout<<"数组逆时针旋转90度为:"<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<a[i][j]<<"  ";cout<<endl;}}void shun_fanzhuan(int a[][4], int n)//顺时针翻转90度{int i,j;for(i=0;i<n;i++){for(j=i+1;j<n;j++)swap(a[i][j],a[j][i]);}for(j=0;j<n/2;j++)//注意这是j,即交换列{for(i=0;i<n;i++)swap(a[i][j],a[i][n-1-j]);}cout<<"数组顺时针旋转90度为:"<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<a[i][j]<<"  ";cout<<endl;}}int main(){int a[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};int i,j;cout<<"原数组为:"<<endl;for(i=0;i<4;i++){for(j=0;j<4;j++)cout<<a[i][j]<<"  ";cout<<endl;}ni_fanzhuan(a,4);int b[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};shun_fanzhuan(b,4);return 0;}