1

我正在尝试针对 8 Queens 问题改进我当前的算法,这是我第一次真正处理算法设计/算法。我想结合此处描述的不同 Y 值的排列来实现深度优先搜索: http ://en.wikipedia.org/wiki/Eight_queens_puzzle#The_eight_queens_puzzle_as_an_exercise_in_algorithm_design

我已经实现了置换部分来解决问题,但是我在考虑深度优先搜索时遇到了一些麻烦。它被描述为一种遍历树/图的方式,但它会生成树图吗?只有当深度优先搜索生成要遍历的树结构时,这种方法才会更有效,这似乎是唯一的方法,通过实现一些逻辑来只生成树的某些部分。

所以本质上,我必须创建一个算法来生成一个修剪过的字典排列树。我知道如何实现修剪逻辑,但我只是不确定如何将它与排列生成器联系起来,因为我一直在使用 next_permutation。

是否有任何资源可以帮助我了解深度优先搜索的基础知识或以树形式创建字典排列?

4

3 回答 3

2

一般来说,是的,深度优先搜索的想法是您不必生成(或“访问”或“扩展”)每个节点。

在八皇后问题的情况下,如果您放置一个皇后以便它可以攻击另一个皇后,您可以中止该分支;它不能导致解决方案。

如果您正在解决八皇后的变体,而您的目标是找到一个解决方案,而不是全部 92,那么您可以在找到一个解决方案后立即退出。

更一般地说,如果你正在解决一个不那么离散的问题,比如根据某种度量找到皇后的“最佳”排列,那么你可以在你知道它不会比最终状态更好地导致最终状态时立即中止一个分支你已经在另一个分支上找到了。这与A* 搜索算法有关。

更一般地说,如果您正在解决一个非常大的问题(例如国际象棋),您可能会对一个不精确的解决方案感到满意,因此您可以中止一个可能无法导致您已经找到的解决方案的分支。

于 2010-04-24T15:26:44.260 回答
1

DFS 算法本身不会生成树/图。如果要构建树和图,构建它就像执行搜索一样简单。如果你只想找到一个解决方案,像链表这样的扁平 LIFO 数据结构就足够了:当你访问一个新节点时,将它附加到列表中。当您在搜索中让节点回溯时,将节点弹出。

于 2010-04-24T15:30:17.447 回答
1

A book called "Introduction to algorithms" by anany levitan has a proper explanation for your understanding. He also provided the solution to 8 queens problem just the way you desctribed it. It will helpyou for sure.

As my understanding, for finding one solution you dont need any permutation all you need is dfs.That will lonely suffice in finding solution

于 2015-01-17T06:37:06.677 回答