摘要: 本来想用双向广搜的,但是不太好保存路径,所以我就用的普通的bfs 思路很简单,从初始状态直接搜,每次扩展三个状态,用函数模拟一下三种变换,用map存储路径即可(拒绝康托展开,拒绝哈希,拒绝状压) 不得不说,对于数据不是很毒瘤的题,STL是真的好用啊…… 1 #include <iostream> 2 阅读全文
posted @ 2019-03-30 20:03 AD_shl 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 读完题,这是一道和bfs联通快有关的搜索题,肯定要搜索一些联通快,而这道题的难点在于如何判断当前的联通快属于山峰还是山谷。 因此,我们设计一个算法,在用bfs求联通快的同时,判断当前联通快是山峰山谷或者啥都不是。 具体地,我们像往常一样搜索联通快,若扩展的节点高度与当前联通快不同,则开始判断:如果大 阅读全文
posted @ 2019-03-30 19:15 AD_shl 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 最短路是一个妇孺皆知的算法,可以用多种方法解决。但是第k短路…… 以Dijkstra为例,对于s->t的第k短路,即t点在堆中第k次取出的结果。 于是我们想到了一个朴素的算法:用Dijkstra反复执行,直到t点在堆中第k次取出时结束。 考虑一下优化:用A*算法优化。 根据A*估价函数的设计原则,x 阅读全文
posted @ 2019-03-30 16:05 AD_shl 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 这是一道搜索题,我采用双向广搜+状压解决,对每一个状态枚举可以移动的位置,将状态扩展,然后通过对数组状压的方法进行记录结果。 另外,注意对答案为0的特判,因为起始状态与目标状态相同时无法搜出结果。 1 #include <iostream> 2 #include <cstdio> 3 #includ 阅读全文
posted @ 2019-03-30 15:24 AD_shl 阅读(212) 评论(0) 推荐(0) 编辑