(2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2017年2月5日)
对于任意非n阶矩阵的转置,用c++应该怎么写代码,思考了一下,发现并没有那么简单,上网找到了一个比较好的算法,叫做矩阵原地转置矩阵算法。基于别人的代码,改写成可以使用指针动态分配内存的方法。
先放传送门:C++实现矩阵原地转置算法的实现
原理并不难,那篇文章非常的详细,我不再赘述,下面把改写好的代码发出来。
1 /************************************************************************* 2 > File Name: matrix_transpose.cpp 3 > Author: SongLee 4 > Modified: JCChan 5 ************************************************************************/ 6 #include<iostream> 7 using namespace std; 8 /* 后继 */ 9 int getNext(int i, int m, int n) 10 { 11 return (i%n)*m + i / n; 12 } 13 /* 前驱 */ 14 int getPre(int i, int m, int n) 15 { 16 return (i%m)*n + i / m; 17 } 18 /* 处理以下标i为起点的环 */ 19 void movedata(int *mtx, int i, int m, int n) 20 { 21 int temp = mtx[i]; // 暂存 22 int cur = i; // 当前下标 23 int pre = getPre(cur, m, n); 24 // 从最后一个数开始,获得它的前驱,直到前驱的值和最后一位值相等,相当于交换的逆过程