给定数组元素之间的n
和m
长度的int数组(每个元素值等于它的索引)。将数组划分为 2 部分(部分中的所有元素必须相对于给定的m
连接未连接)。
如果存在此类分区,则输出true
,否则为false
。
以下是3个例子:
给定数组:{0, 1, 2, 3}
给定连接:0-1
,2-3
(0连接到1,2连接到3)
输出应为:true
(分区为{0,3}
,{1,2}
)
给定数组:{0, 1, 2}
给定关联:1-2
,0-1
,0-2
输出应为:false
(没有2个分区仅包含未连接的元素)
给定数组:{0,1}
给定连接:0-1
输出应为:true
(分区为{0}
,{1}
)
我当前的方法:在数组元素之间形成所有可能的连接并存储它们,从我存储的连接中删除m
传入连接,检查剩余连接是否形成给定数组的2个分区。这个解决方案太慢了(我怀疑构建所有可能的连接需要花费太多时间)。
答案 0 :(得分:3)
问题是测试给定图表是否为bipartite,即2-colorable,这可以通过depth-first search有效地完成。从任意节点开始,分配两种颜色中的任何一种。对于迭代的每个边,为目标节点提供与其父节点不同的颜色。如果无法做到这一点,请终止搜索,因为输入不是二分。否则,您已生成图表的双色,表示两个分区。