任何人都可以建议我以最少的步骤解决这个游戏http://puzzle-games.pogo.com/games/poppit的策略。
我的想法是找到一组气球(同色的邻居),这些气球在被移除后会给我们留下最少数量的群体。
然而,我的实施还不够好。我唯一能想到的是收集所有气球组,并检查每组如果我删除它会留下多少组。这当然是非常繁重的操作,因为它包括在我删除组然后恢复原始订单后重新排列气球。
如果有人想出更好的方法来实现我的算法或完全解决问题的方法,我会非常感激!
答案 0 :(得分:1)
此游戏是Same Game的另一个版本。关于是否存在最优解的问题在this paper中显示为NP完全。这意味着一般来说, 最佳解决方案需要指数时间才能找到。另一方面,如果您将问题转化为布尔可满足性问题的实例,您可以使用SAT solver来比特定方法更快地解决问题。
答案 1 :(得分:0)
您提到的是Backtracking方法。你弹出气球组,直到你不能再这样做,然后你撤消最后一步并尝试别的东西。维基百科对此的解释比以往任何时候都要好。
虽然这听起来很重,但我现在猜测计算机应该可以很快解决你的问题。
至于实现,它基于一个递归函数(一个自己调用的函数),伪代码看起来像这样:
void main()
{
setupBoard();
if(Try())
print("Found Solution");
}
boolean Try()
{
if(noballonsLeft)
return true; //Found solution!
foreach(Move move in getPossibleMoves())
{
doMove(move);
if(Try())
return true; //This try found a solution!
undoMove(move);
}
return false; //No solutions found
}
这将找到问题的 a 解决方案,扩展这个以找到最佳解决方案应该没问题;)