我有一个任务,我应该在任何给定的 NxN 中解决摩天大楼难题 ( http://www.brainbashers.com/skyscrapershelp.asp )。我试图做出一个蛮力解决方案,但是自从我运行它以来,它似乎并没有很快完成(现在已经运行了一个小时,而电路板的最后一个单元格没有更新超过“1”)。我一直在研究以更有效的方式解决难题的算法,但我并不真正了解它是如何工作的。我已经建立了一个程序,可以:
1) 使用拼图大小的值测试提示(例如,5x5 拼图中的 5),这意味着相邻行必须从提示旁边的字段中的 1 开始,递增 1 直到大小谜题(前面示例中的 5,即 1、2、3、4、5)。
2) 测试值为 1 的提示,这意味着相邻字段必须是拼图的最大大小(在前面的示例中为 5)。但在此之后,我真的不知道我的代码下一步该去哪里。如果我解决特定大小的谜题(例如 4x4),我知道如何工作,但问题是为 NxN 谜题开发一个......我发现了这个:摩天大楼谜题算法 ,但我并不真正理解那里提供的答案. 我也发现了这个: http: //www.wikihow.com/Solve-a-Skyscrapers-Puzzle 但这是一个具体的例子,我真的不明白如何将它转换成 NxN 算法。
我不能发布两个以上的链接,所以我将发布我的代码的链接(包括蛮力解决方案和算法一)作为对这个问题的评论。感谢您的时间!