关于次要对角线的转置(翻转)矩阵

时间:2017-10-24 22:45:06

标签: c++ matrix transpose

我试图编写一个程序来转换关于它的辅助对角线的方阵。我知道如何正常转置它(沿着它的正常对角线),但我无法弄清楚如何对次轴进行转换。

循环有什么问题?我知道我必须把它运行到N / 2'并改变' i'的初始化并且' j',即使我这样做也不行。

void transpose(int a[][N]) // Transposes matrix along the secondary diagonal 
{
    for (int i = 0; i < N; i++)
        for (int j = 0; j < i; j++)
        {
            int tmp = a[i][j];
                a[i][j] = a[N - 1 - j][N - 1 - i];
                a[N - 1 - j][N - 1 - i] = tmp;
        }

}

2 个答案:

答案 0 :(得分:2)

首先尝试一个简单的3x3矩阵。 您只需访问(N ^ 2 - N)/ 2个元素。

这是一个视觉效果。

   0 1 2
0  * * /
1  * / x
2  / x x

您只需要访问(9-3)/ 2 = 3个元素。 特别是(0,0),(0,1)和(1,0),因此N = 3的嵌套循环应该类似于

for(int i = 0; i < 2; i++)
    for(int j = 0; j < 2-i; j++)
        //etc..

希望这有帮助。

答案 1 :(得分:0)

所以,经过很长一段时间后我想出了循环。 如果其他人有同样的问题,请点击这里。

void swapEl(int mat[][n])
{
    for (int i = 0; i < (n - 1); i++)
        for (int j = 0; j < (n - 1) - i; j++)
        {
            int tmp = mat[i][j];
                mat[i][j] = mat[(n - 1) - j][(n - 1) - i];
                mat[(n - 1) - j][(n - 1) - i] = tmp;
        }       
}