欢迎光临散文网 会员登陆 & 注册

第 74 讲:算法源代码

2021-11-02 01:26 作者:SunnieShine  | 我要投稿

下面列举在前文提到或使用到的一些算法源代码。

Part 1 回溯法算法代码

由于回溯是相对比较简单的算法,所以我们使用C语言进行描述。它的代码如下。

测试的结果如下。

可以从思路上发现,回溯法无法验证题目的唯一性,但它可以验证题目是否有解。如果题目无解,则没有任何的结论的输出;但如果有解,它就会尝试输出一个解,并退出程序(不过你可以考虑更改“n == 81”条件内执行的语句来更改得到解时候的执行逻辑。

不过由于C语言不支持异常,所以我们无法控制输出固定个数解的操作。不过在其它的高级编程语言里,我们可以采用异常机制,当输出的解的总数超出一定限度的时候,让该递归函数抛出递归跳出的异常(例如Java的InterruptedException)来跳出执行。

Part 2 舞蹈链算法代码

这里列出舞蹈链算法的源代码,为了思路更为清晰,此处将使用C#语言描述。

2-1 数据节点文件(DataNode.cs)

2-2 列节点文件(ColumnNode.cs)

2-3 舞蹈链文件(DancingLink.cs)

2-4 矩阵行节点文件(DancingLink.MatrixRow.cs)

2-5 解题器对象(DancingLinksSolver.cs)

2-6 主方法调用(Program.cs)

Part 3 Linq解法算法代码

在数独里,我们甚至可以使用Linq轻松完成一个题目的解题,而且比纯回溯要更快一些。我们可以尝试使用Linq自带的查询和替代功能,为一个数独盘面(字符串形式)进行解题。代码如下(使用C# 8提供的语法)。

可以从代码里看出,实际上它就是在不断替换字符为0(0表示空格)的地方,然后得解的操作。

第 74 讲:算法源代码的评论 (共 条)

分享到微博请遵守国家法律