这几天在写洛谷算法题的时候被暴力枚举的题目给困住了,一个个的需要列出所有可能,挺麻烦的,这几天的题目写的很慢,其中遇到了一个题需要用dfs(深度优先搜索算法 ),个用来标记该点是否被访问过,一个用来把该点放入数组,所以这两个标记是相辅相成的,一定同时出现;dfs就是随机选定一个起点将其标记为已经访问过的点,然后就是递归调用进行与其相邻的点的搜索,直到所有的点都被访问完。简单点说就是从顶点V开始,访问这个顶点,然后依次从V的未被访问的邻接点出发深度优先遍历图,直至图中所有和V有路径的相通的顶点都被访问了,如果此时还有顶点未被访问,则选择图中未被访问的那个顶点作为起点,重复上述动作。但应用起来好难,所以现在的了解仅仅只是在理论层面。
说起dfs就不得不说一下回溯与递归,递归是一种算法结构,回溯是一种算法思想。一个递归就是在函数中调用函数本身来解决问题。回溯就是通过不同的尝试来生成问题的解,有点类似于穷举,但是和穷举不同的是回溯会“剪枝”,剪枝的意思也就是说对已经知道错误的结果没必要再枚举接下来的答案了。
虽然有些思路,但是如果在真正的算法题中估计自己还是写不出来。继续努力吧!