在科尔曼问题22.2.6中,我们遇到了摔跤手的问题。如果它说有N个摔跤运动员,即N个节点和r对竞争,即边缘,我们需要将摔跤运动员划分为好人和坏人,这样就不会有2个好人成为竞争对手。
给出的解决方案是
根据需要执行尽可能多的BFS以访问所有顶点。分配所有摔跤手 距离甚至是好人和所有摔跤运动员的距离都很奇怪 家伙。然后检查每个边缘以确认它介于好人和坏人之间 的家伙。该解决方案将花费O(n + r)时间用于BFS,O(n)时间指定 每个摔跤手都是好人或坏人,而O(r)时间检查边缘,这是 O(n + r)时间整体。
我对解决方案的问题很少
根据需要执行尽可能多的BFS以访问所有顶点。 - >每次从不同的节点开始?但他们每次都会给我们相同的生成树吗?
那些无法从BFS到达的节点
答案 0 :(得分:0)
是的,因为@n.m已经提到了。您可能会获得可能未连接的图表G
。例如,考虑此图
您有2个连接的组件。如果仅从node1
运行BFS(或DFS),您将永远不会发现node3, node4, node5
。因此,通过从每个节点执行BFS,您将发现所有连接的组件。这也回答了一个问题,即从每个节点执行BFS都不会产生相同的生成树。因此,n个节点和e边缘的复杂度为O(n + e)
。
注意 - 此图表可能对您的问题陈述不正确,因为您提到N个节点和r对,即任何连接组件中没有奇数节点。该图像用于解释连接的组件。