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

Min*_*lai 4 c++ transpose matrix

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

循环中有什么问题?我知道我必须运行它直到“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;
        }

}
Run Code Online (Sandbox Code Playgroud)

Min*_*lai 9

所以,我花了很长时间才弄清楚循环。正确的代码应该访问方阵中的上三角元素,并将它们与下三角矩阵中的相应元素交换。次对角线保持不变。

这是经过测试的工作代码:

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;
        }       
}
Run Code Online (Sandbox Code Playgroud)