题意是中文的不解释.(http://acm.hdu.edu.cn/showproblem.php?pid=1430)
思路:
这个题目直接BFS会超时的(我一开始超时了) ,如果考虑双向BFS的话感觉字典序那个地方不好控制,而且双向BFS也很耗时间,其实我们可以打表,只跑一边BFS,以起点
1,2,3,4,5,6,7,8开始,一直遍历所有状态,把答案存在一个map里面,至于是map,
还是map什么的都可以,只要正确hash就行了,看到还有用"康拓公式"哈希的
(个人表示没学过),这样一边广搜之后就会得到一个一12345678为起点到任意状态的答案,
下面是关键,每次会给我们一组数据,初始状态 s 和 末状态 e ,我们要想办法把题目给的数据和我们打表数据联系起来,这样就设计到一个映射关系.
比如:
测试数据是 S 1 2 3 4 到 4 3 2 1
7 8 6 5 8 6 5 7
转换成 S 1 2 3 4 到 4 3 2 1
8 7 6 5 7 6 5 8
其实就是八个数字之间的位置关系,把测试数据的位置关系当规则,把1 2 3 4 5 6 7 8
按照这个规则转换成相应的终点,然后直接输出打表后的答案就OK了.
ac代码:
#include
#include
#include
#include
#include
#include