C++ 如何使用广度优先搜索解决难题?
几个学期前我上过这门课,但当时我学的东西不多。我看了麻省理工学院关于广度优先搜索的讲座。我从中学到了很多,但是它只教会了我BFS是一个搜索图的好算法,太棒了。我需要解决一个难题 所以我在C++中写了这个难题,但现在我需要找出一种方法来解决它。据我所知,我必须让计算机将这个谜题的所有状态生成一个图表,然后让计算机使用BFS来找到解决的状态?如何计算我的拼图有多少个顶点和边?我所说的谜题是“饼干桶三角游戏”。任何关于如何解决这个坏男孩的帮助都将不胜感激 很抱歉,我没有提到这个谜题是如何工作的。给你一个有14个销钉和15个位置的三角形,看起来像这样:C++ 如何使用广度优先搜索解决难题?,c++,graph,artificial-intelligence,puzzle,breadth-first-search,C++,Graph,Artificial Intelligence,Puzzle,Breadth First Search,几个学期前我上过这门课,但当时我学的东西不多。我看了麻省理工学院关于广度优先搜索的讲座。我从中学到了很多,但是它只教会了我BFS是一个搜索图的好算法,太棒了。我需要解决一个难题 所以我在C++中写了这个难题,但现在我需要找出一种方法来解决它。据我所知,我必须让计算机将这个谜题的所有状态生成一个图表,然后让计算机使用BFS来找到解决的状态?如何计算我的拼图有多少个顶点和边?我所说的谜题是“饼干桶三角游戏”。任何关于如何解决这个坏男孩的帮助都将不胜感激 很抱歉,我没有提到这个谜题是如何工作的。给你一
*
2 3
4 5 6
7 8 9 A
B C D E F
其中*是空的空间。现在,有点像跳棋,你只能跳出一个木桩到另一个木桩到空白处,所以这里只有两个有效的移动,4比1,或者6比1,中间的木桩被移除,结果是:
1
2 *
4 5 *
7 8 9 A
B C D E F
在以6比1的比分跳转之后
继续这样做,直到电路板上只剩下一个peg。以下是解决状态空间搜索问题的标准方法: 创建一个可以生成下一个可能状态的函数: 此函数需要能够接收代表董事会的某种信息,并返回可能进行的移动(或由此产生的董事会)的列表。例如,您可以迭代每个peg,计算给定peg可以进行的移动,并将它们附加到列表中,直到您检查完所有这些 使用BFS生成/搜索图形: 将当前节点初始化为开始状态,然后开始广度优先搜索。对于每个节点,计算下一个可能的状态,并将它们添加到搜索队列的末尾。保留已添加到队列中的每个状态的字典(因为它比列表更有效)。如果生成词典中的词典,请放弃它,而不是编辑它。最终,你会找到一块只有一个peg的棋盘,这时你的搜索就成功了
这是使用广度优先搜索解决难题的标准方法。您不需要预先知道有多少个顶点和边,因为您的代码将在运行时生成图形。请注意,它不会自动生成状态空间的完整图形。为了做到这一点,您需要在每次遇到重复的线路板状态时添加一条边 关于您编写的代码问题的问题必须在问题本身中描述特定的问题,并包括重现问题的有效代码。请看SSCCE.org以获得指导。我只想知道用计算机解决谜题的过程。你能描述一下谜题是什么吗?我们大多数人都不会听说这个问题,也不会在不知道它是什么的情况下给出任何有用的反馈。几乎可以肯定,让计算机生成图形是错误的。图形是概念性的,它不必在计算机内存中显式表示为数据结构。