您好我在尝试开发适用于此解谜程序的代码时遇到问题 我有2个整数数组,每个元素包含5个元素
a[] = {1,1,0,2,2};
b[] = {2,2,0,1,1};
我的程序假设一步一步地将数组a排列到数组b中并比较它们是否匹配。
解决的规则是:整数1只能向右移动,整数2只能向左移动,0用作跳跃1到2的控制点,反之亦然;
基本上解决这个难题的方法是:
a b c d e
1 1 0 2 2 - >starting positiong
1 0 1 2 2 - >b moves to c therfore b is now vacated 0
1 2 1 0 2 - >d can jump over c because they are opposites so b = d
1 2 1 2 0 - > e moves over to the vacated d
1 2 0 2 1 - > c can jump over d to e because e is vacated
0 2 1 2 1
2 0 1 2 1
2 2 1 0 1
2 2 0 1 1 = b[]
我编写代码只是为了声明数组,但我不知道如何解决任何帮助表示赞赏。
答案 0 :(得分:2)
我在这看到两种可能性。如果谜题与示例一样简单,您可以先递归地解析深度。对于每种状态,您可以评估可用于执行步骤的规则。你全力以赴,递归调用你的求解函数来尝试下一个级别。要评估你应该记住找到最短路线所采取的步骤。
如果事情变得更复杂,你可以看看Minimax算法。如果内存为我服务,你需要一些方法来评估不同的状态,例如通过正确位置的项目数量。您还可以设计启发式方法来截断注定要失败的可能性。
祝你好运!