好。我来给你“通俗”的解释一下。
比如说你在校园里看到一个非常pretty的背影,长发,白裙。可惜她立刻就不见了。你要在学校里寻找这位mm。假设现在你们学校里所有人都站成一排等你检阅。。。。。。
先说DFS(深度优先搜索),你找啊找,看到一个mm就停下来,看看是不是长发,不是就跳过,是的话就看是不是白裙,不是就跳过,也是的话就让他转过去给你看看,是不是刚才那种感觉,不是就跳过,是的话,恭喜你找到了!!
再说BFS(宽度优先搜索),你找啊找,看到一个是mm就拉出来放一边,然后继续找,再看到一个是mm再放到那边,直到所有人都看完,这时候,所有的mm都被你拉到了一边;然后她们继续站成一排,你还是从头开始看,是不是长发,是就拉出来,不是就跳过,直到所有的长发都拉了出来;这些长发mm就又站成了一排,你又从头开始看,是不是白裙。。。。这么进行下去,最后全校所有的长发白裙mm就都被你挑了出来。然后你再看背影是不是刚才的感觉。
也许你已经体会到了吧(没有的话,我就囧了。。。),DFS是找到一个符合条件的就继续看其他条件是否符合,直到匹配到有一个条件不符合了,就跳过这个候选,继续找其他的候选是否符合;BFS是按照某个或某组条件的先找出来,然后再在这些找出来的候选里,继续把另一个或一组条件符合的找出来……。
因为上述的特性,DFS通常需要用递归回溯来实现,当然也可以用栈;BFS则通常用队列来实现。
DFS通常用来解决“只要有一组可行解即可”的问题,比如说上面找mm的例子,你找到一个长发白裙并且背影很像的mm就可以停了,当然也可以不停,把所有的都找出来。
BFS通常用来解决“最少用多少步能搞定”的问题,还比如说上面找mm的例子,也许你们学校只有一个长发mm呢,那么你只用到了一个条件就找到了背影mm。
DFS和BFS都可以用来枚举所有的情况。
温馨提示:内容为网友见解,仅供参考