Algorithm 计算有向图平方的算法(以邻接表的形式表示)

Algorithm 计算有向图平方的算法(以邻接表的形式表示),algorithm,graph,graph-algorithm,Algorithm,Graph,Graph Algorithm,我正在构造一个算法来计算一个有向图的G^2,它是邻接列表的一种形式,其中G^2=V,E',其中E'被定义为u,V∈E′如果G中的u和v之间有一条长度为2的路径。我非常理解这个问题,并且找到了一个我认为是正确的算法,但是我的算法的运行时间是OVE^2,其中v是顶点数,E是图的边数。我想知道我怎样才能在不久的将来做到这一点,从而使它更有效率 这是我提出的算法: 对于顶点中的顶点 为了邻居中的邻居 邻居中的n 如果=邻居 然后->ifn.value==邻居 将其添加到新的邻接列表中 中断;//这意味着

我正在构造一个算法来计算一个有向图的G^2,它是邻接列表的一种形式,其中G^2=V,E',其中E'被定义为u,V∈E′如果G中的u和v之间有一条长度为2的路径。我非常理解这个问题,并且找到了一个我认为是正确的算法,但是我的算法的运行时间是OVE^2,其中v是顶点数,E是图的边数。我想知道我怎样才能在不久的将来做到这一点,从而使它更有效率

这是我提出的算法:

对于顶点中的顶点 为了邻居中的邻居 邻居中的n 如果=邻居 然后->ifn.value==邻居 将其添加到新的邻接列表中 中断;//这意味着我们在顶点和邻居之间找到了一条大小为2的路径
继续,否则

使用BFSbreadth first search可及时解决问题。关于BFS的事情是,它逐级遍历图。这意味着它首先以距离源顶点1的距离遍历所有顶点。然后它以距离源顶点2的距离遍历所有顶点,依此类推。所以我们可以利用这个事实,当我们到达距离为2的顶点时,终止BFS

以下是伪代码:

For each vertex v in V
{
 Do a BFS with v as source vertex
 {
  For all vertices u at distance of 2 from v
  add u to adjacency list of v 
  and terminate BFS
 }
}

因为BFS需要时间OV+E,我们对每个顶点调用它,所以总时间是OVV+E=OV^2+VE=OVE。请记住,对于每个BFS遍历,从新的数据结构开始。

使用BFSbreadth first search可以在时间OVE中解决问题。关于BFS的事情是,它逐级遍历图。这意味着它首先以距离源顶点1的距离遍历所有顶点。然后它以距离源顶点2的距离遍历所有顶点,依此类推。所以我们可以利用这个事实,当我们到达距离为2的顶点时,终止BFS

以下是伪代码:

For each vertex v in V
{
 Do a BFS with v as source vertex
 {
  For all vertices u at distance of 2 from v
  add u to adjacency list of v 
  and terminate BFS
 }
}
因为BFS需要时间OV+E,我们对每个顶点调用它,所以总时间是OVV+E=OV^2+VE=OVE。请记住,对于每个BFS遍历,从新的数据结构开始