首先对不起我的英语。

我想在二郎使用回溯算法。它将作为一个猜测,解决部分填充数独游戏。甲9x9的数独被存储为81个的元素列表,其中每一元素存储的可能数目,其可以进入该单元格。

有关的4×4独我的初始溶液看起来像这样: [[1],[3],[2],[4],[4],[2],[3],[1],[2,3],[4],[1],[2, 3],[2,3],[1],[4],[2,3]]

此数独具有2级的解决方案。我写出来,他们两个。那最初的解决方案达成后,我需要实现一个回溯算法,但我不知道如何做到这一点。

我的想法是写出来的固定元件到名为fixedlist新的列表,将所述多溶液细胞改变为[]。

有关上述示例的fixedlist看起来像这样: [[1],[3],[2],[4],[4],[2],[3],[1],[],[4],[1],[],[] [1],[4],[]]

在这里,我有一个“样本”,我寻找在其中是不等于1的solutionlist最低长度,并且我尝试该单元格的第一可能数量和我把它到fixedlist。在这里,我有一个算法,更新细胞,并检查它是否仍然是可解的数独与否。如果没有,我不知道该怎么退后一步一个和尝试一个新的。 我知道它的伪代码,我可以用它为命令式语言而不是二郎神。 (序言实际实现回溯算法,但二郎没有)

任何想法?

有帮助吗?

解决方案

重新:我bactracking功能

这些是提供用于处理反向跟踪和类似于一个序言引擎逻辑变量的框架的一般功能。您必须提供的功能(谓语),它描述的程序逻辑。如果你写他们,你会在序言中我可以告诉你如何将其转化为二郎。简单地说你翻译是这样的:

p :- q, r, s.

在序言成类似

p(Next0) ->
    Next1 = fun () -> s(Next0) end,
    Next2 = fun () -> r(Next1) end,
    q(Next2).

下面我忽略所有其他参数以外的延续。

我希望这给一些帮助。正如我所说,如果你描述你的算法,我可以帮你翻译它们,我一直在寻找一个很好的例子。你可以,当然,也很好做自己,但这提供了一些帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top