Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用广度优先搜索解决难题?_C++_Graph_Artificial Intelligence_Puzzle_Breadth First Search - Fatal编程技术网

C++ 如何使用广度优先搜索解决难题?

C++ 如何使用广度优先搜索解决难题?,c++,graph,artificial-intelligence,puzzle,breadth-first-search,C++,Graph,Artificial Intelligence,Puzzle,Breadth First Search,几个学期前我上过这门课,但当时我学的东西不多。我看了麻省理工学院关于广度优先搜索的讲座。我从中学到了很多,但是它只教会了我BFS是一个搜索图的好算法,太棒了。我需要解决一个难题 所以我在C++中写了这个难题,但现在我需要找出一种方法来解决它。据我所知,我必须让计算机将这个谜题的所有状态生成一个图表,然后让计算机使用BFS来找到解决的状态?如何计算我的拼图有多少个顶点和边?我所说的谜题是“饼干桶三角游戏”。任何关于如何解决这个坏男孩的帮助都将不胜感激 很抱歉,我没有提到这个谜题是如何工作的。给你一

几个学期前我上过这门课,但当时我学的东西不多。我看了麻省理工学院关于广度优先搜索的讲座。我从中学到了很多,但是它只教会了我BFS是一个搜索图的好算法,太棒了。我需要解决一个难题

所以我在C++中写了这个难题,但现在我需要找出一种方法来解决它。据我所知,我必须让计算机将这个谜题的所有状态生成一个图表,然后让计算机使用BFS来找到解决的状态?如何计算我的拼图有多少个顶点和边?我所说的谜题是“饼干桶三角游戏”。任何关于如何解决这个坏男孩的帮助都将不胜感激

很抱歉,我没有提到这个谜题是如何工作的。给你一个有14个销钉和15个位置的三角形,看起来像这样:

    * 
   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以获得指导。我只想知道用计算机解决谜题的过程。你能描述一下谜题是什么吗?我们大多数人都不会听说这个问题,也不会在不知道它是什么的情况下给出任何有用的反馈。几乎可以肯定,让计算机生成图形是错误的。图形是概念性的,它不必在计算机内存中显式表示为数据结构。