
【一只蒟蒻的刷题历程】【蓝桥杯】历届试题 九宫重排 (八数码问题:BFS+集合set)

我们把第一个图的局面记为:12345678. 把第二个图的局面记为:123.46758 显然是按从上到下,从左到右的顺序记录数字,空格记为句点。 本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。
memcpy
发布日期:2021-05-04 19:23:40
浏览次数:20
分类:技术文章
本文共 1664 字,大约阅读时间需要 5 分钟。
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。


输入格式
输入第一行包含九宫的初态,第二行包含九宫的终态。
输出格式
输出最少的步数,如果不存在方案,则输出-1。
样例输入
样例输出
3
样例输入
样例输出
22
思路:
思路来自紫书P199页,一毛一样的题目。
通过BFS求最短路,第一次出现与目标九宫格相同时,就是最少的步数
把九宫格的状态通过数组记录下来,记录过程中需要判重,避免把同种情况的九宫格访问多次。
判重:将九宫格变化为一个九位数放入集合中(集合中没有才放入)。
看书上说集合这种方法虽然简单,但是效率最慢,以后有需要在学习其他几种方法。
memcmp


代码:
#include#include #include #include #include #include #include #include #include
发表评论
最新留言
不错!
[***.144.177.141]2025年03月23日 06时15分20秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
eclipse中server location灰色解决
2019-03-03
idea 写web项目图片不显示
2019-03-03
实用网站推荐
2019-03-03
idea中写mybatis报错
2019-03-03
RestFul 风格
2019-03-03
CSS浮动属性
2019-03-03
HTML+CSS基础
2019-03-03
SVM多类识别
2019-03-03
Failed to load OpenCL runtime解决
2019-03-03
svn 撤销已提交的错误修改
2019-03-03
算法工程师数学理论提高札记(improving)
2019-03-03
仿微信--主要版本说明
2019-03-03
Android存储
2019-03-03
Retrofit学习
2019-03-03
Android卡顿优化--界面秒开
2019-03-03
Android网络优化--工具
2019-03-03
Android网络优化--精准获取流量消耗
2019-03-03
Android进程的启动流程
2019-03-03
异步任务--AsyncTask
2019-03-03