如何使用回溯算法获得所有可能的解决方案?

问题描述 投票:2回答:1

我正在使用in this youtube video中所述的回溯算法。

现在,我应该能够获得所有可能的解决方案。我可以使用回溯算法来做到这一点吗?如果不可能,我应该使用哪种其他(简单)算法?

c# solution sudoku backtracking
1个回答
9
投票

此问题不太适合该网站,因为它似乎与实际代码无关。

但是我还是会尝试一下。

当然,您可以通过回溯算法获得所有可能的解决方案。记住回溯算法是如何工作的:

同时(仍有猜测可用)做一个猜想用猜测解决难题如果有解决方案,则记录解决方案并退出循环。从可能的猜测清单中排除猜测如果您记录了一个解决方案,那么这个难题就可以解决。

如果您需要所有解决方案,只需将算法修改为:

同时(仍有猜测可用)做一个猜想用猜测解决难题如果有解决方案,请记录解决方案。不要放弃从可能的猜测清单中排除猜测如果您记录了任何解决方案,那么难题就可以解决。

[顺便说一下,我写了一系列关于使用图形着色回溯算法在C#中解决数独的博客文章;您可能会感兴趣:

https://docs.microsoft.com/en-us/archive/blogs/ericlippert/graph-colouring-with-simple-backtracking-part-one

在此代码中,您将看到以下行:

return solutions.FirstOrDefault();

“解决方案”包含一个枚举所有解决方案的查询。我只想要第一个这样的解决方案,所以这就是我要的。如果需要所有解决方案,只需重写程序,以使其不调用FirstOrDefault。请参阅下面的注释以获取一些注释。

© www.soinside.com 2019 - 2024. All rights reserved.