有向图的转置算法

问题描述

我正在尝试编写一个简单的算法来表示反向邻接矩阵。我想要就地,运行时间为 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;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...