最近几天的学习主要还是看例题吧。看了这么长时间的题以后,感觉对于搜索有一些思路了。专题里面的练习题题目都过了一遍,找了一道感觉比较简单的试着写了一下,目前还没有过去样例,不过大致的框架是模仿着例题写完了,还没调好,等之后再好好看看吧。成功写出一道以后,其他的应该就会好很多了吧。
我一直以为BFS会用的比较多,因为感觉DFS效率不高而且很容易超时。不过这两天看题发现似乎大部分题目用的都是DFS,有点出乎意料,这个专题写代码是一定要注意用时的问题,除了各种细节以外还要尽量找到最佳的算法,努力节省时间。
关于两种搜索的实现:
BFS具体过程:
1 每次取出队列首元素(初始状态),进行拓展
2 然后把拓展所得到的可行状态都放到队列里面
3 将初始状态删除
4 一直进行以上三步直到队列为空。
DFS具体实现过程:
1 每次取出栈顶元素,对其进行拓展。
2 若栈顶元素无法继续拓展,则将其从栈中弹出。继续1过程。
3 不断重复直到获得目标状态(取得可行解)或栈为空(无解)。
看题时发现bool和map用到的频率特别高,这里总结一点零碎的知识点:
布尔型变量的值只有 真(true)和假(false),可用于逻辑表达式,也就是“或”“与”“非”之类的逻辑运算和大于小于之类的关系运算,逻辑表达式运算结果为真或为假。
C++中如果值非零就为true,为零就是false。
true是bool型的,TRUE是int型的。
NULL与0没有区别,只不过在C里面会做一个强制类型转换。