Graph 图遍历

Graph 图遍历,graph,depth-first-search,Graph,Depth First Search,在一个有n个人的聚会上,请注意,某些成对的个体无法相互站立。 给出一个这样的配对列表,确定我们是否可以将n个人分成两组,这样所有人 在这两个群体中,他们都是友好的,也就是说,他们能够相互支持 一个暴力解决方案是找到所有可能的n人组合,选择n/2人,然后验证团队中的每个人都是友好的,如果是,那么你也必须检查另一半中的每个人。如果双方都满意,那么你已经找到了解决办法。否则,请转到下一个组合。显然,这不是一个理想的解决方案,但它确实起到了决定性的作用。通常在面试中,最好从有效的开始,然后反复提出更好的

在一个有n个人的聚会上,请注意,某些成对的个体无法相互站立。 给出一个这样的配对列表,确定我们是否可以将n个人分成两组,这样所有人
在这两个群体中,他们都是友好的,也就是说,他们能够相互支持

一个暴力解决方案是找到所有可能的n人组合,选择n/2人,然后验证团队中的每个人都是友好的,如果是,那么你也必须检查另一半中的每个人。如果双方都满意,那么你已经找到了解决办法。否则,请转到下一个组合。显然,这不是一个理想的解决方案,但它确实起到了决定性的作用。通常在面试中,最好从有效的开始,然后反复提出更好的想法


一个更复杂的解决方案是计算,然后删除任何非双向的边,选择任意节点开始,使用,标记在组1中找到的每个节点。然后选择任何未标记的节点,并标记组2中找到的每个节点。如果有任何剩余的未标记节点,那么个体不能被分成两个友好的组。

假设我们有一个G,即成对的人不能在同一个组中,他们之间有一条边。在此G中使用DFS,并将Group1设置为s,然后将Group2设置为其后续项,然后将Group2。。。。如果我们能完成它,我们就会找到它,否则会有一些冲突,这意味着我们不能像问题所问的那样将它们分成两组。

这看起来像是一个习题集问题。到目前为止你都试了些什么?从语法上来说,这根本不像一个问题……是的,这是一个在面试中问我的问题集。我知道这必须使用图遍历来完成。但是我不知道如何解决这个问题,我不认为这个算法会在图断开连接的情况下找到组。例如,如果我们有X恨Y和Z恨W,有效的解是{X,W}和{Y,Z}。