我开始根据以下规则开发一个偶然性游戏的算法:
下面是一个示例:
(S,S,2,2,2,4,2,2,2,000,000,000,000,000,000,000,000,000,000),2,2,000,000,000,000,000,000,000,000,000,000,000,000,666,442,4O -4 -2,2-2,2-4,E,,2,2,2,2,2,2,4,2,4,4,4,4,4,0-2,4,2,4,4,2,2,2,2,2,2,2,0-4,2,2,4,0,0,1,2,4,4,000,4x2,2,4,0,0,639)的2,2,2,0-2,2,4
玩家从S开始。最快的获胜方式是:
预期的结果是3,因为至少需要3次发射才能完成游戏。
我的解决方案是基于一种算法,该算法从最终案例开始,并检查是什么情况驱动到最后一个案例。然后,我会检查哪些病例可以到达我已经找到的病例。这样的话,我就不必检查那些不会导致最终结果的案件。
问题是,我更倾向于重视代码的质量及其有效性,因为我认为我找到的算法是不够的。
有什么建议吗?
发布于 2016-11-23 15:34:52
你可以把你的棋盘看作有向图。每个案例都是一个节点,编号的案例有边缘连接到他们指向的案例,而S和R案例有六条边连接到接下来的六种情况。边缘的重量是一样的。
在这种情况下,您的问题变成了沿着最短路径找到起始节点和结束节点之间的距离,这是一个已经在许多不同的变体中得到了广泛的研究问题。
作为参考,您可以查看一个标准的广度优先搜索,您的算法应该与此算法相当(您可以在找到目的地后立即返回,但是完整的算法会计算从一个节点到所有其他节点的距离)。
我不认为决定是从最终情况还是从一开始就突出的决定是重要的,在这两种情况下,你将有一些董事会结构将是更慢或更快的分析,但平均复杂性应该是相同的。(正如您所说,从结束开始,您将避免检查不会导致它的情况,但从一开始,您将避免检查无法从它到达的情况)。
https://stackoverflow.com/questions/40767950
复制相似问题