java-将整数数组划分为2个未连接的部分
作者:互联网
给定一个int数组(每个元素的值等于它的索引),数组元素之间的长度为n和m.将数组分为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个分区.该解决方案太慢(我怀疑建立所有可能的连接会花费太多时间).
解决方法:
问题是测试给定的图形是否为bipartite,即2-colorable,可以通过使用depth-first search高效地完成图形.从任意节点开始,为它分配两种颜色.对于每个迭代的边,为目标节点提供与其父节点不同的颜色.如果这不可能,请终止搜索,因为输入不是二分的.否则,您将生成图表的2色指示两个分区.
标签:graph-algorithm,java,algorithm 来源: https://codeday.me/bug/20191111/2019479.html