我试图编写一个程序来转换关于它的辅助对角线的方阵。我知道如何正常转置它(沿着它的正常对角线),但我无法弄清楚如何对次轴进行转换。
循环有什么问题?我知道我必须把它运行到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;
}
}
答案 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;
}
}