首页 > 其他分享 >矩阵原地转置

矩阵原地转置

时间:2023-01-15 18:03:00浏览次数:47  
标签:arr 行号 转置 交换 矩阵 原地 int


------------------------------------------------------------------------------------------------------------------------------------------------------      

 看了下网上矩阵原地转置的方法,真是复杂,很难看懂。

于是我自己画图分析了一下,发现了一个比较简单的方法。

----------------------------------------------------------------------------------------------------------------------------------------------------------

我们知道矩阵的转置就是【将行变成列,将列变成行】。

一个元素A[m][n]经转置后变成了A[n][m],由此我们可以通过将元素相互交换的方法来实现矩阵的转置。

元素相互交换,关键是控制循环的条件。

--------------------------------------------------------------------------------------------------------------------------------------------------------

元素相互交换方法举例:

         一个8行8列的矩阵的转置的过程,如下图所示,由图可知,

第一次交换时,是将第一行和第一列进行交换,初始行号为0,列号为0     //注:行号和列号的编号都是从0开始

第二次交换时,是将第二行和第二列进行交换,初始行号为1,列号为1

第三次交换时,是将第三行和第三列进行交换,初始行号为2,列号为2

第四次交换时,是将第四行和第四列进行交换,初始行号为3,列号为3

第五次交换时,是将第五行和第五列进行交换,初始行号为4,列号为4

......

哈哈,从以上看出规律来了吗?

我们用外循环控制行,内循环控制列,内循环的初始值设为外循环的值就可以了。具体看后面的代码。

矩阵原地转置_矩阵

--------------------------------------------------------------------------------------------------------------------------------------------------------

矩阵原地转置例子:

#include <iostream>
using namespace std;

#define ROW 3
#define COL 4

//矩阵原地转置
void Transpose(int arr[ROW][COL])
{
int temp;
for (int i=0;i<ROW;i++)
{
for(int j=i;j<COL;j++)
{
temp=arr[i][j];
arr[i][j]=arr[j][i];
arr[j][i]=temp;
}
}
}

void main(void)
{
int arr[ROW][COL]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
cout<<"矩阵原地转置前\n";
for(int i=0;i<ROW;i++)
{
for(int j=0;j<COL;j++)
printf("%3d ",arr[i][j]);
cout<<endl;
}

Transpose(arr);
cout<<endl;
cout<<"矩阵原地转置后\n";
for(int i=0;i<COL;i++)
{
for(int j=0;j<ROW;j++)
printf("%3d ",arr[i][j]);
cout<<endl;
}
cin.get();
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//效果截图

矩阵原地转置_矩阵转置_02

---------------------------------------------------------------------------------------------------------------------

 

​​

------------------------------------------------------------------------------------------------

您的十分满意是我追求的宗旨,您的一点建议是我后续的动力。

 

 

 

 

 

 

 

标签:arr,行号,转置,交换,矩阵,原地,int
From: https://blog.51cto.com/softo/6008864

相关文章

  • 矩阵顺时针旋转90度
    -----------------------------------------------------------------------------------------------有这样一道题目:10.已知有n×n的方阵A,编写程序对A进行如下运算:(1)转......
  • 将矩阵进行水平镜像和垂直镜像
    -----------------------------------------------------------------------------------------------有这样一道题目:10.已知有n×n的方阵A,编写程序对A进行如下运算:(1)转置(2......
  • 区间DP-二维前缀和-差分-6292. 子矩阵元素加 1
    304.二维区域和检索-矩阵不可变DescriptionDifficulty:中等RelatedTopics:设计,数组,矩阵,前缀和给定一个二维矩阵matrix,以下类型的多个请求:计算其子矩形......
  • hdu:Another kind of Fibonacci(含多种关系的矩阵快速幂)
    ProblemDescriptionAsweallknown,theFibonacciseries:F(0)=1,F(1)=1,F(N)=F(N-1)+F(N-2)(N>=2).NowwedefineanotherkindofFibonacci:......
  • 【BFS】LeetCode 542. 01 矩阵
    题目链接542.01矩阵思路题目让求1到0的距离,其实可以转换成求0到1的距离,将所有的0作为源结点放入队列进行BFS。BFS本质上就是从源点开始的搜索算法,本题只不过是所有的......
  • 【BFS】LeetCode 1091. 二进制矩阵中的最短路径
    题目链接1091.二进制矩阵中的最短路径思路BFS找最短路模板题代码classSolution{publicintshortestPathBinaryMatrix(int[][]grid){if(grid[0][......
  • C++计算矩阵对角线和的程序
    二维数组或矩阵的使用对于几个应用。矩阵行和列用于保存数字。我们可以定义2DC++中的矩阵也使用多维数组。在本文中,我们将了解如何使用C++计算给定方阵的对角线和。矩......
  • hdu:Sum of Tribonacci Numbers(带前缀和矩阵快速幂)
    ProblemDescriptionEverybodyknowsFibonaccinumbers,nowwearetalkingabouttheTribonaccinumbers:T[0]=T[1]=T[2]=1;T[n]=T[n-1]+T[n-2]+T[n......
  • hdu: Count(矩阵快速幂)
    ProblemDescriptionFarmerJohn有n头奶牛.某天奶牛想要数一数有多少头奶牛,以一种特殊的方式:第一头奶牛为1号,第二头奶牛为2号,第三头奶牛之后,假如当前奶牛是第n头,那......
  • hdu:Queuing(矩阵快速幂)
    ProblemDescriptionQueuesandPriorityQueuesaredatastructureswhichareknowntomostcomputerscientists.TheQueueoccursofteninourdailylife.Ther......