-6

嗨,我在尝试开发适用于这个谜题求解器的代码时遇到问题我有 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[]

我编写了代码只是为了声明数组,但我不知道如何解决任何帮助。

4

1 回答 1

2

我在这里看到两种可能性。如果谜题和例子一样简单,你可以先递归地解决它。对于每个状态,您都评估可以使用哪些规则来迈出一步。您将它们全部尝试,递归调用您的求解函数以尝试下一个级别。要进行评估,您应该记住为找到最短路线所采取的步骤。

如果事情变得更复杂,您可以查看 Minimax 算法。如果没记错的话,您需要一些方法来评估不同的状态,例如通过正确位置的项目数。您还可以设计启发式方法来截断注定失败的可能性。

祝你好运!

于 2013-10-02T20:08:16.493 回答