方阵上的最佳数字排列

时间:2013-04-27 18:42:19

标签: c# algorithm optimization

我正在尝试解决以下问题而无法想到如何:

我们有一组数字(线,正方形,'加'等),它们最初被放置在矩阵上,因此它们中的一些重叠。我们正在寻找最少数量的移动,以便数字不重叠。数字不会对角移动,只能垂直和水平移动。

由于

1 个答案:

答案 0 :(得分:0)

以下是breadth-first search解决方案的概述:

  • 假设一个(implicit)图表由顶点组成,每个顶点代表一个唯一的位置 矩阵中的所有数字以及边缘代表单个合法移动的位置 图(上/下/左/右,不会导致图形移出矩阵)。
  • 通过将表示初始数字配置的节点添加到标记为未访问的BFS队列中,在此图表中执行广度优先搜索。
  • 对于队列中的每个未访问的节点,检查它是否是无重叠的,如果它是完成的,如果它没有标记为已访问并添加其邻居(所有可能的一步移动来自该配置的所有数字) )到BFS队列的末尾。您可以使用HashSet存储您访问过的节点(图形位置的唯一配置),因为可以通过不同的移动顺序访问相同的配置。
  • 如果BFS队列变空,则没有解决方案,因为您已检查了所有可能的图形配置。