kuangbin专题一 简单搜索 题解思路

近来想起来补一下基础,确实从基础题里还能学到很多,搜索这方面更是自己所欠缺的,总结一下简单搜索的结题思路。

A - 棋盘问题 - POJ 1321
思路:
不规则棋盘上的八皇后问题,回溯检查一下即可。

B - Dungeon Master POJ - 2251
思路:
三维的迷宫,向六个方向bfs,跟平面迷宫一样。

C - Catch That Cow POJ - 3278
思路:
1xN 的坐标上固定终点,求从起点到终点的最少步骤,每次+1或-1或坐标*2。
由于出现过坐标*2的操作,因此可能出现接近MAXN*2的位置,因此数组至少要开两倍。然后bfs即可。

D - Fliptile POJ - 3279
思路:
很有意思的题目,现在只会最普通的做法= =。
用dp的思想去考虑,如果上面的若干行全为0,那么考虑将下面的一行也全变为 0 ,最终全部变为 0 。
具体过程就是根据 i-1 行,调整 i 行的操作,使得 i-1 行全变为 0,一直计算到结尾,检查是否全为0。容易发现,当第一行的 1,0分布固定时,后面的所有操作都应是固定的,题目要求求出求出最小字典序,那么利用位运算枚举第一行的所有 1, 0分布,暴力求出答案即可。

E - Find The Multiple POJ - 1426
思路:
给出一个<200的数字 n ,求一个仅有 1 和 0 构成的十进制数 x,x|n 。
应有严格证明(此处没有)证明 x 必然在1e19范围内,不需要用到大整数。
利用到搜索的一点思想:
当 x 不能整除时,入队的是x*10和 x*10+1,因为小于10*x的所有枚举在前面的阶已被求过了。

F - Prime Path POJ - 3126
思路:
求一个五前导零的四位数到另一个四位数的最少变换次数。要求:
每次变换一个位上的数字,要求变换出来的数字为质数。
那么用a[5]保存一下,同样是简单bfs得出答案。

G - Shuffle’m Up POJ - 3087
思路:
单向搜索,用到记忆化,用map存一下状态是否出现过,参见博客
http://blog.csdn.net/joovo/article/details/78671430

H - Pots POJ - 3414
思路:
水壶倒水问题,要打印路径,比另一个非常可乐稍微繁琐一点。
倒水操作利用模拟实现,bfs,关键在于打印路径,需要在node节点里加入一个指针,每次bfs的时候都要将后一个状态指向前一个状态,那么在得到终止状态时,从终止状态迭代到初始状态即可,可以利用栈输出。
注意有六种状态,用for循环和数组优化代码量比较好。

I - Fire Game FZU - 2150
思路:
题目要求最少燃烧的时间,由于数据量很小,先判断是否为两个联通块,再暴力每个点为起点开始bfs,得出最优答案。

J - Fire! UVA - 11624
思路:
有障碍,和蔓延的火势的迷宫。
由于火焰在不断蔓延,那么就考虑将火焰和人一起push进队列bfs就完美解决问题。需要注意考虑火先移动,所以先 push Fire.

K - 迷宫问题 POJ - 3984
思路:
暴力bfs

L - Oil Deposits HDU - 1241
思路:
经典油田勘探问题,dfs求连通块

M - 非常可乐 HDU - 1495
思路:
详见博客,存在特殊性可以数论解法。
http://blog.csdn.net/Joovo/article/details/78661761

N - Find a way HDU - 2612
思路:
图上存在两个起点,多个终点。要求在一个终点相遇,求两人时间总和最短。
本来想从多个终点开始向两个起点bfs,但是T了。
后来想想从两个起点开始bfs,遇到终点就存一下该终点的时间,然后遍历所有终点求最优解。这样只需要2*bfs+遍历图 即 N

总结:
简单搜索转换到最后,都是单源多源的问题,优化问题,打印路径。
不能一心想着搜索,状态转移,有时候先从题目自身入手,优化完再打。
当然还有很多题型这里面没有,一些剪枝。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
并查集是一种常用的数据结构,用于管理一个不相交集合的数据。在并查集中,每个元素都有一个父节点指向它所属的集合的代表元素。通过查找和合并操作,可以判断两个元素是否属于同一个集合,并将它们合并到同一个集合中。 在解决某些问题时,可以使用并查集进行优化。例如,在区间查询中,可以通过优化并查集的查询过程,快速找到第一个符合条件的点。 对于拆边(destroy)操作,一般的并查集无法直接实现这个功能。但是可以通过一个巧妙的方法来解决。首先,记录下所有不会被拆除的边,然后按照逆序处理这些指令。遇到拆边操作时,将该边重新加入并查集中即可。 在实现并查集时,虽然它是一种树形结构,但只需要使用数组就可以实现。可以通过将每个元素的父节点记录在数组中,来表示元素之间的关系。通过路径压缩和按秩合并等优化策略,可以提高并查集的效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [「kuangbin带你飞」专题五并查集专题题解](https://blog.csdn.net/weixin_51216553/article/details/121643742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [并查集(详细解释+完整C语言代码)](https://blog.csdn.net/weixin_54186646/article/details/124477838)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值