【问题标题】:Java fitting pipes by backtrackingJava 通过回溯安装管道
【发布时间】:2012-07-17 05:31:12
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: java algorithm recursion backtracking


【解决方案1】:

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

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

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

编写放置处理器,当棋子放入棋盘时更新这些属性

创建决定零件是否可以放置在特定位置的逻辑。

此时从一个空板开始,放置你知道的部分

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

  • 选择第一个空单元格
    • 如果没有复制当前板输出(解决方案)
  • 对于每个可用的部件,它都会尝试它是否适合
    • 如果有,请将其放置并重新调用

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

【讨论】:

    猜你喜欢
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2015-12-30
    • 2020-10-15
    相关资源
    最近更新 更多