我试图理解下面的代码,它在行x col上转换矩阵
int transpose(int* a, int row, int col)
{
for(int i = 0; i < row*col; i++)
{
int old = i;
do
{
old = (old%row)*col + old/row;
}
while(old < i)
swap(a[i],a[old])
}
}
这一行(old = (old%row)*col + old/row)
正在做什么?
答案 0 :(得分:0)
矩阵存储在大小为row*col
的一维数组中。数组索引为i=r*col+c
,假设c
是当前列,r
是当前行。要计算索引中的行,请使用整数除法r=i/col
来获取列索引,使用余数c=i%col
。
在引用行中,old
是数组索引。该语句计算转置元素的新索引,因为除法和余数不是使用col
计算的,如上所示,但使用row
。
do while
循环可防止元素交换两次。但是我觉得很难理解,并且相信应该有更好的方法来做到这一点。