我正在寻找“你是如何找到它的”,因为我不知道如何找到我的程序的算法复杂性。
我使用 java 编写了一个数独求解器,但没有考虑到效率(我想尝试让它递归地工作,我成功了!)
一些背景:
我的策略采用回溯来确定,对于给定的数独谜题,该谜题是否只有一个唯一的解决方案。所以我基本上读了一个给定的谜题,然后解决它。一旦我找到了一个解决方案,我不一定完成,需要继续探索进一步的解决方案。最后,会出现以下三种可能结果之一:拼图根本无法解决,拼图有唯一的解决方案,或者拼图有多个解决方案。
我的程序从一个文件中读取拼图坐标,该文件的每个给定数字都有一行,由行、列和数字组成。按照我自己的约定,7的左上角写成007。
执行:
我从文件中加载值,并将它们存储在二维数组中我沿着数组向下移动,直到找到一个空白(未填充的值),并将其设置为 1。并检查是否有任何冲突(我的值是否输入是否有效)。如果是,我转到下一个值。如果不是,我将值增加 1,直到找到一个有效的数字,或者如果它们都不起作用(1 到 9),我返回 1 步到我调整的最后一个值并增加那个值(使用递归)。当所有 81 个元素都被填充时,我完成了解决,没有冲突。如果找到任何解决方案,我会将它们打印到终端。否则,如果我尝试在最初修改的第一个元素上“返回一步”,则意味着没有解决方案。
我的程序算法复杂度如何?我认为它可能是线性的 [O(n)],但我多次访问该数组,所以我不确定:(
任何帮助表示赞赏