完成图形检查
Complete graph checking
如何以有效的方式检查完整图(即每个节点相互连接)?给定的图是无向无权的。
我已经使用BFS来检查,但它不是有效的方式来检查所有节点,
1 <= number of nodes <= 10^4
有其他方法可以帮助我完成这项任务吗?
对于n
个节点,有n*(n-1)/2
条边。所以你可以很容易地检查完整图
完全图:
- 图中的边数必须为
N(N-1)/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
边缘。所以你可以很容易地检查完整图
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- C++图形类指针混淆
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 提升图形库:以高性能的方式检查vertex_descriptor的有效性
- 如何使用 gdb 调试 LLVM 检查器时以图形方式查看 CFG
- 如何检查进程是否具有图形界面(没有 .NET)
- 完成图形检查
- 检查图形是否使用 BFS 连接并打印 MST
- c++图形DFS循环检查