我正在练习编程竞赛,我正在解决一些我过去无法回答的难题。其中一个是国王的迷宫。基本上,您将获得一个代表“令牌”的NxN数字-50<x<50
数组。你必须从位置1,1开始(我假设在数组索引中为0,0)并在N,N处结束。您必须在您访问的单元格上拾取标记,并且不能单步执行没有标记的单元格(由0表示)。如果你被0包围,你输了。如果迷宫没有解决方案,则输出“无解”。否则,您输出的最高数字可以通过累加您选择的标记来获得。
我不知道如何解决这个问题。我想你可以写一个迷宫算法来解决它,但这需要时间,而在编程竞赛中你只需要两个小时来解决多个问题。我猜我有某种模式我不见了。有谁知道我应该怎么做?
此外,可能有助于提及此问题适用于高中生。
答案 0 :(得分:3)
此类问题通常使用dynamic programming或memoization来解决。
基本上你制定一个递归解决方案,并在记住和重用以前计算过的结果时自下而上解决。
答案 1 :(得分:1)
简单的方法(即最简单的代码)是尝试所有可能的路径 - 尝试每个第一步;每个第一步尝试每个第二步;对于每个第一步/第二步组合尝试每第三步;等等。但是,根据迷宫的大小,这可能需要很长时间才能运行(或者可能不会)。
下一步是考虑如何更快地完成这项工作。第一步通常是消除你知道不会导致完成的移动,或者不能导致比你已经拥有的更高分的结束。由于这是比赛练习,我们将让你自己做这项工作。
答案 2 :(得分:0)
想想“图”算法:The Algorithm Design Manual