将整数数组划分为2个未连接的部分

时间:2017-05-11 13:03:52

标签: java algorithm graph-algorithm

给定数组元素之间的nm长度的int数组(每个元素值等于它的索引)。将数组划分为 2 部分(部分中的所有元素必须相对于给定的m连接未连接)。

如果存在此类分区,则输出true,否则为false

以下是3个例子:

  1. 给定数组:{0, 1, 2, 3}

    给定连接:0-12-3(0连接到1,2连接到3)

    输出应为:true(分区为{0,3}{1,2}

  2. 给定数组:{0, 1, 2}

    给定关联:1-20-10-2

    输出应为:false(没有2个分区仅包含未连接的元素)

  3. 给定数组:{0,1}

    给定连接:0-1

    输出应为:true(分区为{0}{1}

  4. 我当前的方法:在数组元素之间形成所有可能的连接并存储它们,从我存储的连接中删除m传入连接,检查剩余连接是否形成给定数组的2个分区。这个解决方案太慢了(我怀疑构建所有可能的连接需要花费太多时间)。

1 个答案:

答案 0 :(得分:3)

问题是测试给定图表是否为bipartite,即2-colorable,这可以通过depth-first search有效地完成。从任意节点开始,分配两种颜色中的任何一种。对于迭代的每个边,为目标节点提供与其父节点不同的颜色。如果无法做到这一点,请终止搜索,因为输入不是二分。否则,您已生成图表的双色,表示两个分区。