深度优先搜索:
深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次,接下来由两道例题来进一步了解。
t1.踩方格

思路:此题和递归种的汉诺塔问题很相似,也用递归的思想来操作如下图所示

因此此题最重要的就是这个自定义函数
int ways(int i, int j, int n)//从坐标(i,j)开始走
{
if (n == 0)//步数为零返回一
return 1;
visited[i][j] = 1; //将走过的位置置为一
int num = 0; //方法数
if (!visited[i][j - 1]) //判断西边是否走过
num += ways(i, j - 1, n - 1);
if (!visited[i][j + 1])//判断东边是否做过
num += ways(i, j + 1, n - 1);
if (!visited[i + 1][j])//判断北边是否走过
num += ways(i + 1,j, n - 1);
visited[i][j] = 0;//将走过的初始位置置为零,防止影响其他走法
return num;
}
需要注意的是,在函数最后要将visited[i][j] = 0,不

本文介绍了深度优先搜索(DFS)的基本概念,并通过两个实例——踩方格问题和城堡问题,详细阐述了如何运用DFS解决实际问题。在踩方格问题中,利用递归思想寻找所有可能的路径;在城堡问题中,将城堡转换为图结构,通过DFS求解子连通图的数量。每个问题的关键在于自定义的DFS函数及其边界条件处理。
最低0.47元/天 解锁文章
888

被折叠的 条评论
为什么被折叠?



