作业介绍
深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次.
「一条路走到底,不撞南墙不回头」是对「深度优先遍历」的最直观描述。
说明:
深度优先遍历 只要前面有可以走的路,就会一直向前走,直到无路可走才会回头;
- 「无路可走」有两种情况:① 遇到了墙;② 遇到了已经走过的路;
- 在「无路可走」的时候,沿着原路返回,直到回到了还有未走过的路的路口,尝试继续走没有走过的路径;
- 有一些路径没有走到,这是因为找到了出口,程序就停止了;
- 「深度优先遍历」也叫「深度优先搜索」,遍历是行为的描述,搜索是目的(用途);
- 遍历不是很深奥的事情,把 所有 可能的情况都看一遍,才能说「找到了目标元素」或者「没找到目标元素」。遍历也称为 穷举,穷举的思想在人类看来虽然很不起眼,但借助 计算机强大的计算能力,穷举可以帮助我们解决很多专业领域知识不能解决的问题。
模板
int n,m;//一般输入的行列数/边界
int dx[]={};
int dy[]={];
int vis[n][m],mapp[N][N];//vis初始化应该在主函数
int s = 0;//记录步数时间什么的
void DFS(int x,int y)
{
if(x == endx && y == endy)//满足条件
{
return ;
}
for(int i = 0; i<4; i++)//题意不一定是移动某个位置,可能就没办法循环,直接写搜索条件,满足条件就DFS();
{
int tx = x+dx[i];
int ty = y+dy[i];
//判断是否在边界内,是否不可搜索,是否曾搜索过
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&!vis[tx][ty])
{
s++;//每搜一次加一
vis[xx][yy] = 1;
DFS(xx,yy);
//根据题意是否回溯,好像有的不需要回溯
vis[xx][yy] = 0;
s--;
}
}
}
题目
认领作业后才可以查看作业内容。
- 状态
- 正在进行…
- 题目
- 13
- 开始时间
- 2025-1-9 0:00
- 截止时间
- 3333-5-1 23:59
- 可延期
- 24 小时