【发布时间】:2014-05-17 00:46:47
【问题描述】:
我正在编写一个非常简单的游戏。
- 给定 n 块有 k 种颜色的积木放在一个圆圈中
- 如果砖块被移除,与之相邻且颜色相同的砖块将被移除。
- 每走一步,玩家只能移走一块砖(但如果旁边有一块颜色相同的砖,则不计步)
- 如果所有积木都被移走,游戏结束
如何获得到达游戏结束所需的最少步数? (我目前的解决方案是回溯,正在考虑动态规划)
示例:
4 bricks with 3 colors R, G, B place like this:
R G B B G R B G B R R G (R) (let number it 0, 1, 2, ...)
Remove 2 -> 3 will be removed (step = 0)
R G <B> <B> G R B G B R R G
Remove 0 (step = 1)
<R> G * * G R B G B R R G
Remove 4 -> 1, 11 will be removed (step = 1)
* <G> * * <G> R B G B R R <G>
Remove 10 -> 9, 5 will be removed (step = 1)
* * * * * <R> B G B <R> <R> *
Remove 7 (step = 2)
* * * * * * B <G> B * * *
Remove 8 -> 6 removed -> end game, step = 2, minimal
* * * * * * <B> * <B> * * *
真的对不起我的英语
【问题讨论】:
-
"如果一块砖被移除,与之相邻且颜色相同的砖" -- 被移除的砖可能与0、1或2块砖相邻,对吗?
-
举个例子,让我们以最少的步数运行一款游戏。
-
@Dialectus 请稍等
-
@Dialectus:你有一块砖。最少移动次数:1
-
哦,好的,谢谢。我添加了中间状态,以便更好地理解。
标签: algorithm dynamic-programming mathematical-optimization