问题描述
我正在尝试编写一个简单的算法来表示反向邻接矩阵。我想要就地,运行时间为 Theta(n^2)。
起初我有这个:
for i=1 to n
for k=1 to n
//Reverse the edges and update the new adjacency list
A_new[k][i] = A_old[i][k]
return A_new
但是,我意识到内部 for 循环会导致问题,因为如果第一个循环从 1..n 开始,第二个从 1..n 开始,您将需要交换所有内容两次。
内部 for 循环必须是什么才能避免这种情况?
解决方法
如果您返回一个新矩阵,您的代码就可以了。如果你想原地翻转矩阵,那么你可以遍历上面的三角形,然后像这样用下面的三角形交换每个元素:
for i=1 to n-1
for j=i+1 to n
temp = A[i][j];
A[i][j] = A[j][i];
A[j][i] = temp;