我正在使用in this youtube video所述的回溯算法。
现在,我应该能够获得所有可能的解决方案。我能用回溯算法做到这一点吗?如果不可能,我应该使用哪种(简单)算法?
答案 0 :(得分:9)
此问题不适合此网站,因为它似乎与实际代码无关。
但无论如何我都会接受它。
当然,您可以通过回溯算法获得所有可能的解决方案。记住回溯算法的工作原理:
while(there are still guesses available) make a guess solve the puzzle with the guess if there was a solution then record the solution and quit the loop. cross the guess off the list of possible guesses if you recorded a solution then the puzzle is solvable.
如果您想要所有解决方案,那么只需将算法修改为:
while(there are still guesses available) make a guess solve the puzzle with the guess if there was a solution then record the solution. Don't quit. cross the guess off the list of possible guesses if you recorded any solution then the puzzle is solvable.
顺便说一句,我写了一系列关于使用图形着色回溯算法在C#中解决数独的博客文章;你可能会感兴趣:
http://blogs.msdn.com/b/ericlippert/archive/tags/graph+colouring/
在此代码中,您将看到以下行:
return solutions.FirstOrDefault();
“solutions”包含一个枚举所有解决方案的查询。我只想要第一个这样的解决方案,所以这就是我的要求。如果您想要每个解决方案,只需重写程序,使其不会调用FirstOrDefault
。有关注释,请参阅下面的评论。