日期:2014-05-20  浏览次数:20720 次

??算法相关,跳棋问题

一共21个洞,20颗棋子(1-20编号)每个棋子跳过另一个棋子进入洞中,就可把另一个棋子拿走。
比如棋子3跳过棋子1进入东中,棋子1被拿走,每一步的规则都是必须跳过一个棋子一走,而且必须
跳进洞中。最后的目标是跳刀只剩一粒棋子。
求遍历出所有可行的跳法。
------解决方案--------------------
那就简单些,递归调用,判定当前有几种跳法,然后递归每一种跳法,结束的条件就一种,没有可跳的棋了,这里有两种情况,要么就剩一个棋子,符合答案,存储一种解法,否则留下多于1个棋子,解法失败,丢弃。所有跳法应该可以递归出来,但是java会不会内存溢出就不得而知了,,,,,,
------解决方案--------------------
引用:
如果能隔着跳的话,太过复杂了,不能吧,只能相邻的才能跳过去

如果不能隔着跳,最后剩两个不相邻的子不是无解?
------解决方案--------------------
很惭愧,目前没想出太好的剪枝函数,建议到算法板块发帖。