卡题之dfs

这几天在写洛谷算法题的时候被暴力枚举的题目给困住了,一个个的需要列出所有可能,可麻烦,这几天的题目写的很慢,其中遇到了一个题需要用dfs(深度优先搜索算法 ),个用来标记该点是否被访问过,一个用来把该点放入数组,所以这两个标记是相辅相成的,一定同时出现;dfs就是随机选定一个起点将其标记为已经访问过的点,然后就是递归调用进行与其相邻的点的搜索,直到所有的点都被访问完。简单点说就是从顶点V开始,访问这个顶点,然后依次从V的未被访问的邻接点出发深度优先遍历图,直至图中所有和V有路径的相通的顶点都被访问了,如果此时还有顶点未被访问,则选择图中未被访问的那个顶点作为起点,重复上述动作。,但应用起来好难,所以现在的了解仅仅只是在理论层面。

说起dfs就不得不说一下回溯与递归,递归是一种算法结构,回溯是一种算法思想。一个递归就是在函数中调用函数本身来解决问题。回溯就是通过不同的尝试来生成问题的解,有点类似于穷举,但是和穷举不同的是回溯会“剪枝”,剪枝的意思也就是说对已经知道错误的结果没必要再枚举接下来的答案了。

说起来很简单但是实操起来可谓是困难重重。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容