首先抱歉我的英语.
我想在Erlang中使用回溯算法.它可以作为解决部分填充的sudokus的猜测.9x9数独存储为81个元素的列表,其中每个元素存储可以进入该单元格的可能数字.
对于4x4数独,我的初始解决方案如下所示:[[1],[3],[2],[4],[4],[2],[3],[1],[2,3], [4],[1],[2,3],[2,3],[1],[4],[2,3]]
这个数独有2个解决方案.我必须写出他们两个.在达到初始解决方案之后,我需要实现一个回溯算法,但我不知道如何制作它.
我的想法是将固定元素写入一个名为fixedlist的新列表,该列表将多个解决方案单元格更改为[].
对于上面提到的例子,固定列表如下所示:[[1],[3],[2],[4],[4],[2],[3],[1],[],[4] ,[1],[],[],[1],[4],[]]
从这里我有一个"样本",我寻找解决方案列表中不等于1的最小长度,我尝试这个单元格的第一个可能的数量,我把它放到那个固定列表.在这里,我有一个算法来更新单元格并检查它是否仍然是一个可解决的数独.如果没有,我不知道如何退一步并尝试新的.我知道它的伪代码,我可以将它用于命令式语言,但不能用于erlang.(prolog实际上实现了回溯算法,但是erlang没有)
任何的想法?
这些问题是一种游戏,我没有找到适合他们的解决方案.
可以:::用C++ 编写而不使用引号或类似的东西,编译器也会接受它(宏也是禁止的).
C#也是如此,但在C#中,你必须写???.
我认为C++将使用::范围运算符而C#将使用? :,但我不知道它们的答案.
任何的想法?