机会游戏的算法

时间:2016-11-23 15:08:46

标签: algorithm performance optimization complexity-theory

我开始使用以下规则为机会游戏开发算法:

  • 在游戏开始时,玩家从起始案例S(开始)开始。

  • 他首先掷骰子并提前显示的空格数量。

  • 骰子的可能值从1到6。

  • 然后玩家执行当前案例中指示的动作(前进,返回,重新骰子(如果当前案例为R:Relance))。

  • 每次操作都需要1个回合。

  • 当玩家到达结束案例E(结束)时赢得游戏。玩家必须完全落在终点线上并且不能超过它。

  • 开始和结束的情况S和E不一定在托盘的开头和结尾。

  • 转牌出局失去了比赛。

以下是一个例子:

| 4 | S | -2 | 1 | R | 4 | 3 | 4 | 3 | -5 | 2 | -4 | E |

玩家从S案开始。获胜的最快方式是:

  • 掷骰子并制作3,进入R方(转1)。

  • 重新掷骰子并制作6,转到2号方位(转2)。

  • 玩家有义务前进2个案件并到达案件E(第3轮)。

预期结果为3,因为至少需要3次发布才能完成游戏。

我的解决方案基于一个从End案例开始的算法,并检查驱动到End的案例。然后,我将检查哪些案例可以达到我已经找到的案例。这样,我就不必检查那些不会导致最终案例的案例。

问题是,我更倾向于更加重视代码的质量及其有效性,因为我认为我发现的算法还不够。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以将自己的电路板视为有向图。每个案例都是一个节点,编号的案例边缘将它们连接到它们指向的案例,而S和R案例有六个边缘将它们连接到接下来的六个案例。边缘具有相同的重量。

在这种情况下,您的问题就是找到沿最短路径开始和结束节点之间的距离,has been widely studied in many different variants

作为参考,你可以看一个标准的breadth-first search,你的算法应该与这个算法相当(你可以在找到目的地后立即返回,完整的算法计算从节点到ALL的距离)其他节点)。

我不认为决定是从End案例还是从Start案例中起作用很重要,在这两种情况下你都会有一些分析速度较慢或较快的板子结构,但平均值复杂性应该是一样的。 (正如你所说,从End开始,你要避免检查不会导致它的案例,但是从Start开始你会避免检查无法从它上面找到的案例)