首页 > 其他分享 >矩阵旋转

矩阵旋转

时间:2023-07-11 16:15:06浏览次数:27  
标签:arr 函数 int 矩阵 旋转 ++

矩阵旋转

题目:使用C++,原地90℃旋转一个M*N的矩阵,不允许增加任何内存空间(空间复杂度为O(1))
分析:
1、使用一个函数rotateMatrix,这个函数通过对矩阵进行转置和中心对称交换,实现了将矩阵顺时针旋转90度。
1 2 3 -> 1 4 7 -> 7 4 1
4 5 6 -> 2 5 8 -> 8 5 2
7 8 9 -> 3 6 9 -> 9 6 3
2、使用了一个函数printMatrix,该函数用于打印一个二维数组(矩阵)。函数接受三个参数:一个二维整数数组arr;一个整数m;一个整数n。函数使用嵌套的for循环遍历矩阵的每个元素,最终,这个函数会按照矩阵的行列顺序打印出矩阵中的所有元素。
3、使用一个主函数,调用rotateMatrixprintMatrix这两个函数,输出原始矩阵和旋转后的矩阵。

#include <iostream>
using namespace std;

void rotateMatrix(int arr[3][3],int m, int n)//将二维数组表示的矩阵顺时针旋转90度 
{
    // 先转置矩阵
    for (int i = 0; i < m; i++)
    {
        for (int j = i; j < n; j++)
        {
            int temp = arr[i][j];
            arr[i][j] = arr[j][i];
            arr[j][i] = temp;
        }
    }

    // 每一行按中心对称交换元素
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n / 2; j++)
        {
            int temp = arr[i][j];
            arr[i][j] = arr[i][n - 1 - j];
            arr[i][n - 1 - j] = temp;
        }
    }
}

void printMatrix(int arr[3][3], int m, int n)//打印一个二维数组 (矩阵) 
{
    for (int i = 0; i < m; i++)//控制行数 
    {
        for (int j = 0; j < n; j++)//控制列数 
        {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
}
int main()
{
    int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int m = 3; // 矩阵的行数
    int n = 3; // 矩阵的列数

    cout << "原始矩阵:" << endl;
    printMatrix(arr, m, n);

    rotateMatrix(arr, m, n);

    cout << "旋转后的矩阵:" <<endl;
    printMatrix(arr, m, n);

    return 0;
}

结果

标签:arr,函数,int,矩阵,旋转,++
From: https://www.cnblogs.com/Qin-Rong-2004-12-/p/17544970.html

相关文章

  • 单片机扫描矩阵键盘
    采用分时复用的方法,定时置位行,检测列,确定按下的按键,输出不同的按键值。voidKbScanProcess(void){//uint8_tRow=0;//按键所在行//uint8_tCol=0;//按键所在列//uint8_tRowCount=0;//按键触发行的个数,用于判断多个按键按下uint8_tColCount=0;//按键触发列的个数,用......
  • ABC_DQ:基于MATLAB/Simulink的三相静止坐标系到两相静止坐标系(Clark变换)到两相旋转坐标
    ABC_DQ:基于MATLAB/Simulink的三相静止坐标系到两相静止坐标系(Clark变换)到两相旋转坐标系变换(Park变换)的仿真模型。仿真条件:MATLAB/SimulinkR2015bID:2720651503371560......
  • 矩阵优化学习笔记
    前言矩阵优化是一种比较靠思维的优化算法,一般简单题考的比较少。个人认为矩阵优化中在运用,所以放了几道题目来讲解。定义矩阵一个\(m\timesn\)的矩阵是一个由\(m\)行\(n\)列元素排列成的矩形阵列。大概长成下面这个样子的。\[A=\underbrace{\begin{bmatrix}a_{1,1......
  • 线性规划对偶 & 全幺模矩阵
    一、线性规划的一般形式线性规划问题,有\(n\)个变量\(x_1,x_2,\cdots,x_n\),满足一些线性约束的条件下,求目标函数的最值。二、线性规划的标准形式设有\(n\)个变量,\(m\)个线性约束,目标函数为\(z\)。\[\maxz=\sum_{i=1}^nc_ix_i\]\[\text{s.t.}\begin{cases}......
  • 方阵旋转
    #include<iostream>usingnamespacestd;intmain(){ intm=3;//长 intn=3;//宽 intk=0; intnum[3][3]; for(inti=0;i<m;i++){ for(intj=0;j<n;j++){ num[i][j]=0; k++; num[i][j]=k; cout<<num[i][j]; }cout<<......
  • JavaCV实现旋转图像识别和旋转角度预测
    引言本文将介绍如何使用JavaCV库来实现图像识别和旋转角度预测,并结合直方图统计和dhash算法来比较图片的相似度。JavaCV是一个基于OpenCV的Java库,提供了丰富的图像处理和计算机视觉功能。环境搭建在开始之前,需要安装JavaCV库和相关依赖。可以通过Maven或手动下载jar包的方式进......
  • 矩阵变换器MATLAB仿真,其他仿真模型也可 图中为三相矩阵 变换器仿真模型及其输入输出电
    矩阵变换器MATLAB仿真,其他仿真模型也可图中为三相矩阵变换器仿真模型及其输入输出电流波形,仿真结果非常完美ID:68300626238147981......
  • 时间序列转图像:相对位置矩阵(Relative Position Matrix)-Python版复现
    时间序列分类(TSC)在时间序列数据挖掘任务中备受关注,已经应用到各个领域。随着卷积神经网络(ConvolutionalNeuralNetwork,CNN)的迅速发展,基于卷积神经网络的TSC方法直到最近才开始出现。因此,提出了一个新的深度学习框架,使用相对位置矩阵(RelativePositionMatrix,RPM)和卷积神经......
  • 数据增强之裁剪、翻转与旋转
    文章和代码已经归档至【Github仓库:<https://github.com/timerring/dive-into-AI>】或者公众号【AIShareLab】回复pytorch教程也可获取。数据增强DataAugmentation数据增强又称为数据增广,数据扩增,它是对训练集进行变换,使训练集更丰富,从而让模型更具泛化能力。技巧:debugconsole......
  • 【验证码逆向专栏】某度滑块、点选、旋转验证码 v1、v2 逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......