搜索综合问题(下)


1.OJ541:相遇问题*(深搜)

image-20210401182858551

image-20210401183655110

image-20210401183950525

2.OJ542:奶酪

image-20210401184933513

image-20210401190924349

image-20210401191245176

image-20210401191429821

3.LeetCode417:太平洋大西洋水流问题

image-20210401192955802

4.LeetCode529:扫雷游戏

image-20210401193331806

image-20210401194705931

5.LeetCode934:最短的桥

image-20210401195913580

image-20210401200241409

6.LeetCode967:连续差相同的数字

image-20210401203202693

7.LeetCode752:打开转盘锁

image-20210401203126441

8.LeetCode127:单词接龙

image-20210401203422614

9.层板等分衣柜

==题目描述==:给定一个高度为2000mm的柜子空间,以及n个层板距离柜子底部的高度,满足移动层板位置使得层板等分衣柜空间,求所有移动层板的顺序。(层板号自下而上一次排列1、2、3、….n层板需要考虑空间位置,不能跨层板移动)

image-20221128224152140

要求:1 ≤ n ≤ 10、输出结果需要按照从小到大的顺序输出。

1
2
3
4
5
6
7
8
9
10
11
input:
n = 3, zs = 50, 60, 1000
output:
3 2 1
input:
n = 4, zs = 50, 600, 700, 1000
output:
1, 4, 3, 2
4, 1, 3, 2
4, 3, 1, 2
4, 3, 2, 1

==思路分析==:

看起来就是每个层板都可以移到到任意位置,但只移动一次,同时不能跨越另一个板移动。

有多种移动方案,题目要求你输出所有方案,并且按从小到大输出。

就是一般你优先尝试移动序号低的版,看看能不能让它移到均分高度的地方。


比如n=3,zs=50,60,1000。

柜子被分割成4部分,位置应该是500、1000、1500,

由于c3板子在1000这个位置,c2、c1是移动不到500这个位置的,

所以先移动c3到1500,再移动c2到1000,最后移动c1到500。

这样就等分了柜子高度了。


这题其实就是先根据板子数量,找出等分位置。

然后依次从序号小的那个板子开始判断能否移到到某个等分位置。

不行的话,就判断下一个。

复杂度不超过n^2,n小于10,可以直接遍历求解。

但是也要考虑一种情况,就是例1里面,如果c2先移动到500,那么c1移动不到1000的,

导致问题解不了了,这种情况也要考虑。


  1. 像这个C1开始在50,要移动到500但是50-500之间有C2,不能动,1开头的都不行,
  2. 然后再试C2,C2也不行,1000被C3占据,
  3. 然后再移动C3,C3移动完再移动C1,还是不行,再移动C2,这时C2可以了,最后移动C1,所以顺序是321

先根据原有高度对应板子可以移到的分位点(比如最高板子只能是移到最上面的分位点,因为最上面的板子位置永远是最高的,同理第i高的板子只能移到第i高的分位点)枚举所有排列情况(最多1024种)然后遍历O(n)考虑排列是否合法,就是看这n个板子高度不能有位于要排的板子和要排到的分位点之间

(1)暴力法:

1