vijosP1016北京2008的挂钟 BFS + 优先队列

本文介绍了作者在vijos上遇到的一道题,P1016北京2008的挂钟。题目要求通过最少的操作将9个钟调整至12点,作者采用了BFS搜索配合优先队列进行优化。在初稿中,由于错误地选择了优先级,导致超时。调整后以操作数为优先级,最终实现按字典序输出最少操作序号。
摘要由CSDN通过智能技术生成

作为一个弱菜,第一次发题解报告,好紧张啊啊啊。。。

昨天闲的无聊,跑上vijos上瞧了瞧,发现vijos改版了,新版的vijos貌似很不错的样子,今天一高兴,在上面水了一天的题。。。

效率不是很高,卡了3个题。。。这个题就是第3个被卡的题。。。

题目链接:https://vijos.org/problems/P1016

题意很简单:有9个钟,每个钟表示4个时刻:12点,3点,6点,9点。现在有9种操作,每种操作分别将9个钟的某几个钟的时针顺时针旋转90度,问至少做哪几个操作,可以最快将9个钟变成12点,输出最少的操作序号,输出顺序类似字典序。

思想:看到此题,直接想到的就是BFS。由于有9个钟,每个钟有4种状态,所以一共有4^9种状态,只需要定义一个9维数组就可以判重,用bool型毫无压力。然后就是普通的BFS过程。不过写完一提交,10个点都TLE了。。。要加优化。很容易想到的是用优先队列优化,不过该用什么作为优先级呢,因为一时脑残,选错了优先级,开始了数小时的悲剧。。。一开始我选的是所有钟状态之和,和越小,越接近终点(终点是所有钟的状态都是0),后来好不容易改对了,可是运行出来的结果老长老长的,这才意识到有问题,果断继续改之。然后重新读了一下题,既然是要找操作数最少的,于是改用当前状态的操作数为优先级,然后测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值