2017年7月31号训练日记

       今天的训练主要是先把搜索题目中的几道简单的题目A掉。搜索分为深搜(dfs)和广搜(bfs)。深搜解决了跳马问题、棋盘放棋子和只含01能整除给定的数问题,广搜解决了抓牛问题、四位素数变另一个四位素数、王的迷宫问题。

       深搜核心是找到边界条件和终止条件(关键),注意初始化(因为初始化问题错过很多次)。原理就是判断当前状态是否符合要求,符合就进行下一步搜索,不符合就返回继续寻找符合要求的状态。深搜可以说是解决一些需要一搜到底的问题,例如马的遍历,素数环,每个人选哪些书都满意等问题。(当然这只是一些水题,难的题我现在还不太会)一定要注意题目给出的特殊要求(例如跳马问题要根据字典排序输出,这时候8个方向就不能是按随意的顺序排)。思考这类问题要从最起点出发,初始条件应该满足哪些,当前状态怎么样才符合要求,怎么样进行下一步搜索,到何时停止,要注意哪些细节。广搜的核心是要从队列中取出最顶的元素,将其弹出,对其状态进行拓展,直到找到目标状态。注意队列的更新(在这上面莫名其妙wr好多次),初始的条件。原理是将满足条件的元素不断拓展直到目标状态出现。广搜主要解决一些最优的问题,例如花费最少的步数抓牛,最少的变换,最短的时间问题。注意在当前步数、时间等充分拓展对每一种可能符合条件的状态,找到目标状态后立刻停止。注意不要向队列中压入重复的元素,需要一个数组来判断。

       总之今天只是做几道水题热热身,而且今天我做的基本都是以前做过的题,主要目的是回顾一下搜索的基本框架。更多的难题在等着我,A出一道题对我来说都将会有收获。由于今天网站有一部分问题,很晚才A到题。不过今天看的题全都A了(水题),希望明天继续努力,能牢记搜索的核心和基本原理,更熟练掌握搜索的诀窍和技巧,再遇到此类问题能够一眼看出是深搜还是广搜。

 

 

你可能感兴趣的:(2017年7月31号训练日记)