最短路径:拾取没有重复的卡

时间:2016-03-22 21:49:33

标签: algorithm graph-algorithm

我的算法课中有一个作业问题,询问以下内容:

  

你有一个游戏板和一条通往终点的道路。你走了一步   时间。在每个“位置”,你走到那里有一堆卡片(a   标准52卡片组的子集)。可能有1张卡,2张卡,   3张卡等没有重复,并且至少有一张卡。

     

游戏的目的是在每个位置挑选一张牌。 您   无法选择同一张卡两次。当你到达终点时,   你希望卡的总面值最小。

     

设计一种算法,根据有多少位置,以及每个位置的卡片组,找到最小的卡片组合。

我真的不知道从哪里开始。我可以进行详尽的搜索,但我担心这样做不够有效。我知道这并不像在每个位置挑选最小的卡片那么简单。由于您不能两次选择相同的卡,您可能会遇到这样的情况:最初选择价值稍高的卡,然后在后期更便宜。我考虑过创建一个“决策树”,但这对时间复杂度也无济于事。

1 个答案:

答案 0 :(得分:0)

使用回溯来查找所有可能的路径,然后选择产生最小值的路径。

您可以使用两个(可能更多)规则预处理数据:

如果路径中的一叠卡片中没有其他堆叠卡片,您可以将该堆叠中的卡片缩减为唯一卡片。

如果路径中的任何堆栈只有一张卡,您可以从其他堆栈中删除所有类似的卡。

你还在看着大约52岁的最坏情况!如果路径很长。