------------------------------------------------------------------------------------------------------------------------------------------------------
看了下网上矩阵原地转置的方法,真是复杂,很难看懂。
于是我自己画图分析了一下,发现了一个比较简单的方法。
----------------------------------------------------------------------------------------------------------------------------------------------------------
我们知道矩阵的转置就是【将行变成列,将列变成行】。
一个元素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();
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//效果截图
---------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
您的十分满意是我追求的宗旨,您的一点建议是我后续的动力。
标签:arr,行号,转置,交换,矩阵,原地,int From: https://blog.51cto.com/softo/6008864