Java通过回溯装配管道

时间:2012-04-08 20:41:57

标签: java algorithm recursion backtracking

我正在审查本地编程竞赛中的编程问题。

您可以下载问题http://www.vlaamseprogrammeerwedstrijd.be/2011/opgaves/cat2-2011/loodgieter.pdf。这是荷兰语,但图片将有助于理解它。

您收到一个m * m网格作为输入,包含一些管道和一些缺失点(问号)。其余的管道必须放在网格中,以便它们与其他管道连接。

每个管道都表示为一个字母(参见第2页的图片)。字母'A'的值为1,'B'的值为2,..

有人知道如何通过回溯Java来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我建议你收集所有关于游戏的知识:

  • 边界是新连接的
  • 管道相互连接
  • ?我真的不懂荷兰语;)

选择一个描述拼图的表示,在每个单元格中都有所需的连接(已经放置的部分暗示)并且可以是一些可能连接或可能不连接的选项

编写放置处理程序,当一块放入棋盘时更新这些属性

创建逻辑,决定是否可以将某个部件放置在特定位置。

此时从空板开始并放置您知道的部件

开始递归,执行以下操作:

  • 选择第一个空单元格
    • 如果没有复制当前板输出(解决方案)
  • 如果它适合的话,它会尝试每个availibe
    • 如果确实如此,请将其放置并自行回忆

我希望你把它放在一起,这是一个很好的谜题, 请注意我每天都玩:daily expert netwalk,它有点类似于此,可以使用的启发式方法,也可以应用于此问题。