关于搜索嘛,在集训第一天下午,林文成学长用他的PPT和他本人的理解,带我们揭开了“搜索”的面纱。说实话,在才听说搜索这个词时,我的理解嘛,就是探索——通过某种固定的方式去找,直到找到目标为止(就跟探索迷宫找出口一样)。而固定的方式用走迷宫来说的话,就是一开始你选择一个方向,一条路走到“黑”?,最后发现不行了就换。
在学长讲之后,我发现大致思路一样,但它的名词换了,叫做遍历。那么关于搜索中核心的“遍历”问题,我们该如何更好的处理呢?首先我认为我们应该在得到问题时首先要知道三个概念:1、起点;2、方向;3、目的地。就如同我们在现实生活中走大型迷宫一样,我们首先要确定入口在哪才开始去走,而确定了往哪走、怎么走、出口在哪才能有走出去的可能。只不过此时现实的我们变成了计算机中的遍历点(我们走的种种情况,都是计算机遍历的种种路径合适的选取,不合适抛弃重来)。
那么三大概念中第一和第三条,也就是起点、目的地,我们如何确定呢?对就是标记,我们可以在输入的同时给它们标记上特殊的符号,这是它们就有了特殊的身份,也就与其他点不在相同了,当如其他干扰项,比如墙、走过点也可以标记。而第二方向呢?我们可以以数字得形式把种种方向存下,最后在选取方向时,把不同的方向逐一遍历,选取最优解。
举个例子,下面红色的两个点便是被标记的起点(1)和目的地(15)。同时5、7、9、11由于是墙的原因,被另外标记。而我们要做的就是从起点(1)走到目的地(15)最短路径。
按照之前的方法我们规定走的方向和规则,比如:优先向右,向下次之,向左次之,向上次之。最后即使遍历了。
遍历完,我们发现有三种可以走向起点(但一种明显呆了,就不要它了),于是情况变成了两种,我们需要选择最优解了。情况①:1—2—6—10—14—15,共五步;
情况②:1—2—3—4—8—12—16—15,共七步。
显然我们选择情①。
大致思路就是这样,集训不枉留下,很高兴看见进步的大家和我!