奥克·我是处理这个问题的 st。
我有一个阵列物体,其数量为{1,2,3}和代表目标{3,0}的阵列,以及包含两组“一”和“一”的移动功能; j 并将其应用于阵列。
现在,我正试图为此写一个解决者。 因此,我们的想法是,我们将一切可能的价值用于i & j,并在我们达到预期目标之前继续加以应用。
我正试图采用一种宽松的方法来处理这一问题,但我无法理解的是,如何阻止我以不同方式再次入侵,找到使我达到目标的最佳“行动”。
因此,可能采取的行动清单:
(0, 1), (0, 2), (1, 0), (1, 2), (2, 1), (2, 0)
在每次行动之后,我们就有了一个新的“数量阵列”,我们需要将这种行动付诸实施,并检查其中是否有任何行动导致“目标阵列”。
因此,我的假体编码是:
solve(puzzle):
if puzzle.isSolved: return true;
else:
solve(puzzle.move(0, 1));
solve(puzzle.move(0, 2));
solve(puzzle.move(1, 0));
solve(puzzle.move(1, 2));
solve(puzzle.move(2, 0));
solve(puzzle.move(2, 1));
- We are assuming that puzzle.move function returns the puzzle with new state.
现在,我确信,我在这里做了一些令人可怕的错误,但我似乎可以把我的指.放在这里。 因此,任何想法/内容/要点都会受到赞赏。
感谢。
<><>Edit>/strong>
• 每个人都能更清楚地认识到这一点:
自.以来。 在采取这一举动后,我就想制造新的难题,以便重新入侵。 从根本上说,需要的是,在每次流动之后,我们将有新的数量。
因此,在搬迁(i = 0, j = 1)之后,初步数额(a, b, c)的泡沫有一笔款项(a-a, b+a, c)。 我们不采取这种新数量阵列,而是采取下一步行动(i = 0, j = 2)。
但是,这只是“树木”的一部分,还有一条需要加以检查的道路,即当我们申请搬迁时(i = 0, j = 2)最初数额,然后从那里开始。
希望:
b 以前,这个问题被称为水问题(http://www.cut-the-knot.org/ctk/Water.shtml)。