我的8数码问题DFS求解器失效,后期状态异常循环求排查
8数码问题DFS求解器异常排查
问题背景
- 初始棋盘状态:
其中1 4 2 3 _ 5 6 7 8_代表空格 - 目标状态在代码中格式化为字符串
"_12345678",对应棋盘:_ 1 2 3 4 5 6 7 8 - 预期完成求解的操作序列:
7U,8L,5D,2D,4R,7U,8U,5L,2D,4D,7R,8U,5U,2L,4D,7D,8R,5U,2U,4L,7D,8D,5R,2U,4U,7L,8D,5D,2R,1R(格式说明:如7U表示将数字7向上移动)
异常现象
前期状态遍历符合预期,但临近结束时出现逻辑异常:
- 执行
8D操作后,进入状态:1 2 5 3 4 _ 6 7 8 - 接着执行
5D操作,进入状态:1 2 _ 3 4 5 6 7 8 - 此时本应执行
2R和1R即可完成求解,但空块突然跳至中间,状态变为:1 2 5 3 _ 4 6 7 8 - 随后算法陷入循环,需手动终止程序。
核心疑问
代码包含get_neighbors和dfs两个核心函数:
get_neighbors:通过移动空块生成相邻状态dfs:实现深度优先搜索逻辑
目前无法确定是这两个函数存在逻辑错误,还是其他环节导致的异常。
代码说明
附上完整代码(注:运行时可能陷入循环,需手动终止)
内容的提问来源于stack exchange,提问作者j k
相关产品推荐
相关产品推荐

