完成图形检查

Complete graph checking

本文关键字:检查 图形      更新时间:2023-10-16

如何以有效的方式检查完整图(即每个节点相互连接)?给定的图是无向无权的。

我已经使用BFS来检查,但它不是有效的方式来检查所有节点,

1 <= number of nodes <= 10^4

有其他方法可以帮助我完成这项任务吗?

对于n个节点,有n*(n-1)/2条边。所以你可以很容易地检查完整图

完全图:

  1. 图中的边数必须为N(N-1)/2
  2. 每个顶点必须准确地连接到N-1个其他顶点。

检查第二个条件的时间复杂度:O(N^2)

对第二个条件检查使用这种方法:

for i in 1 to N-1
 for j in i+1 to N
   if i is not connected to j 
   return FALSE
return TRUE

一个完备 (无向)图已知恰好有V(V-1)/2条边,其中V为顶点数。

所以,你可以简单地检查你是否有完全的V(V-1)/2边。

count = 0
for-each edge in E
    count++
if (count == V(V-1)/2)
    return true
else
    return false

为什么这是正确的?
如果每个顶点都连接到所有其他顶点,那么每个顶点都有精确的V-1边。这是V(V-1)。那么为什么要除以2呢?这是因为在我们的计数中,每条边都连接到另一个顶点,所以我们对每条边计数两次。最后我们得到V(V-1)/2边总数

如果没有更多的附加信息,那么我们必须检查所有的nc2边。正如公认的答案所说的那样。但如果再加入一条信息,我们可以改进。

如果图中两个节点之间没有多条边。也就是说,两个节点之间最多有一条边,这种算法是有用的。

检查连接组件个数是否为1。否则答案是否定的。如果边的个数是N*(N-1)/2,那么是。其他没有。

for n

1<=n<=10^4

节点数,There are

= n*(n-1)/2

边缘。所以你可以很容易地检查完整图