我一直在努力弄清楚如何解决我遇到的河内塔楼的变化,其中有一个限制是每一步都应该涉及中间挂钩。以下是河内常规塔楼的代码,但没有约束条件:
public void Transfer(int numberOfDisks, Stack<int>[] pegs, int @from, int to, int use)
{
if (numberOfDisks > 0)
{
Transfer(numberOfDisks - 1, pegs, @from, use, to);
pegs[use].Push(pegs[@from].Peek());
pegs[@from].Pop();
Console.WriteLine("Move disk: " + numberOfDisks + " from P" + @from + " to P" + to);
Transfer(numberOfDisks - 1, pegs, use, to, @from);
}
}
答案 0 :(得分:1)
1. move smallest for 2 moves in 1 direction.
2. move other token (only possible token) by 1 move
3. goto point 1
答案 1 :(得分:0)
这应该很容易解决,在适当的图表上使用广度优先搜索。请注意,我记得因为我实际上不会在内存中构建图形。现在,从第一个顶点表示的初始状态开始。然后,对于每个允许的移动,创建边缘。如果尚未访问结果状态,请将其添加到顶点的FIFO中以进行访问...基本上它是一个没有任何特殊内容的BFS,我希望您明白这一点,否则请找一个详细解释BFS的教程。
请注意,我不相信使用这个附加规则游戏仍然可以解决,但即使这样也应该很容易用这种方法来证明。