搜索

用宽度、深度、A*搜索分别求解其搜索路径,并给出对应的OPEN表和CLOSED表

第一张图是问题,第二张图是回答格式,拜托了拜托了
头像
匿名用户
1356 次浏览2022.12.04 提问
10

最新回答(1条回答)

头像
2023.04.03 回答

由于没有具体指定问题,本文以八数码问题为例,给出用宽度、深度、A*搜索分别求解其搜索路径,并给出对应的OPEN表和CLOSED表的示例。八数码问题是一种经典的搜索问题,其目标是将3x3的拼图按照指定的顺序排列,并且只能通过交换数字来移动拼图,目标状态如下:1 2 3 4 5 6 7 8 其中数字0代表空格,可以与其它数字交换位置。我们以初始状态如下的拼图为例:8 7 6 5 4 3 2 1 0 三种搜索算法的具体流程如下。宽度优先搜索:1. 将初始状态S加入OPEN表;2. 如果OPEN表为空,则搜索失败;3. 否则,取出OPEN表中的第一个状态,将其加入CLOSED表,并展开该状态,生成其所有可能的子状态;4. 对于每个子状态,如果它等于目标状态T,则搜索成功,并输出路径;否则将其加入OPEN表;5. 回到步骤2。宽度优先搜索的OPEN表和CLOSED表的示例如下:OPEN表:|     状态    |  到达时间  |   父节点  |  |----------|----------|---------|| 8 7 6 5 4 3 2 1 0 |  t = 0    |   NULL  |CLOSED表:|     状态    |  到达时间  |   父节点   ||----------|----------|----------|| 8 7 6 5 4 3 2 1 0 |  t = 0    |   NULL  |深度优先搜索:1. 将初始状态S加入OPEN表;2. 如果OPEN表为空,则搜索失败;3. 否则,取出OPEN表中的最后一个状态,将其加入CLOSED表,并展开该状态,生成其所有可能的子状态;4. 对于每个子状态,如果它等于目标状态T,则搜索成功,并输出路径;否则将其加入OPEN表;5. 回到步骤2。深度优先搜索的OPEN表和CLOSED表的示例如下:OPEN表:|     状态    |  到达时间  |   父节点  |  |----------|----------|---------|| 8 7 6 5 4 3 2 1 0 |  t = 0    |   NULL  |CLOSED表:|     状态    |  到达时间  |   父节点   ||----------|----------|----------|| 8 7 6 5 4 3 2 1 0 |  t = 0    |   NULL  |A*搜索:1. 将初始状态S加入OPEN表,其估价函数值f(S)=g(S)+h(S),其中g(S)表示从初始状态到S的路径长度,h(S)表示从S到目标状态T的最小估价路径长度;2. 如果OPEN表为空,则搜索失败;3. 否则,取出OPEN表中f值最小的状态Smin,将其加入CLOSED表,并展开该状态,生成其所有可能的子状态;4. 对于每个子状态,如果它等于目标状态T,则搜索成功,并输出路径;否则计算其估价函数值f和实际路径长度g,并将其加入OPEN表;5. 如果OPEN表中已经存在某个状态S',且它到达的路径长度更短,则更新OPEN表中该状态的估价函数值和父节点;6. 回到步骤2。A*搜索的OPEN表和CLOSED表的示例如下:OPEN表:|     状态    |  到达时间  |  g(S) |  h(S) |  f(S) |   父节点  |  |----------|----------|-------|-------|-------|---------|| 8 7 6 5 4 3 2 1 0 |  t = 0  |   0   |   17  |   17  |  NULL   |CLOSED表:|     状态    |  到达时间  |  g(S) |  h(S) |  f(S) |   父节点   ||----------|----------|-------|-------|-------|----------|| 8 7 6 5 4 3 2 1 0 |  t = 0  |   0   |   17  |   17  |   NULL   |

置顶