Advertisement

AOJ 0121 Seven Puzzle 深搜BFS 解法思路 AC代码(C/C++版本)

阅读量:

VJ原题:

AOJ 0112

参考:

大佬的代码

getline()函数详解

remove()函数详解

string erase()函数详解

map用法

有关迭代器与容器的相关内容,建议通过网络搜索进行查阅

题意:

7数码问题。在尺寸为2*4的棋盘布局中,放置了7枚棋子,每枚棋子上标注有1至7之间的唯一数字,所有棋子上的数字互不重复。棋盘中存在一个空位,与该空位相邻(包括上下左右四个方向)的棋子可移动至空位所在位置,此时原棋子的位置将变为空位。现提供一个初始状态(该状态可确保转换至目标状态),要求确定从初始状态过渡到指定目标状态所需的最少移动棋子次数。

解题思路分析

为解决常规BFS方法在处理输入时可能导致超时的问题,可采用逆向BFS策略。该方法通过构建一个映射表,记录从目标状态01234567出发到所有可能状态所需的移动步数,其核心思想借鉴了动态规划的原理。最终,只需查询该映射表中对应的键值即可获取所需结果。

AC代码:

复制代码
    #include<iostream>
    #in

全部评论 (0)

还没有任何评论哟~