を転置されてどのようにコードの下に理解しようとしています行の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)
は何をしているのですか?
外側のループは、明らかに行列のすべての要素を反復処理します。ただし、すべての要素がパートナーと交換されるわけではありません。私はこれを理解するのが少し難しいと思う。明らかに、 'old'の値は' while'ループが繰り返すにつれて変更できません。 – Codor
次の順列サイクルです。こちらをご覧ください:https://en.wikipedia.org/wiki/In-place_matrix_transposition – samgak
最初と最後の要素はその位置に残ります。他の要素は交換されます。私が今まで理解してきたのは、すべての要素に対して、私たちは古い位置を見つけようとしています。 – Bhuwan