最近写算法题,经常用到回溯法和深度优先算法,总感觉它们的思路其实是差不多的。
回溯法是求问题的解,使用的是DFS(深度优先搜索)。在DFS的过程中发现不是问题的解,那么就开始回溯到上一层或者上一个节点。DFS是遍历整个搜索空间,而不管是否是问题的解。所以更觉得回溯法是DFS的一种应用,DFS更像是一种工具。**
回溯法和DFS(深度优先搜索)的关系_Java_tkzc_csk的博客-CSDN博客 https://blog.csdn.net/tkzc_csk/article/details/82142442?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1
这是一位大佬的理解,我看了一些题,其实到现在也没想明白,但是我感觉当要求一条道路时,不需要遍历所有空间,就用回溯。如http://acm.hdu.edu.cn/showproblem.php?pid=1242
这是拯救天使找一条通路。
而像这种http://acm.hdu.edu.cn/showproblem.php?pid=1312
红与黑,要求找到所有的单色块,遍历所有,用到DFS。
主要区别在
if (judge(x,y)&&!vis[x][y]){
vis[x][y]=1;
if (map[x][y]=='.')
dfs(x,y,step+1);
else if (map[x][y]=='x')
dfs(x,y,step+2);
else if (map[x][y]=='r')
dfs(x,y,step+1);
vis[x][y]=0;
这里有一个vis[x][y]=0;是回溯。
`