作业介绍

深度优先搜索算法(英语: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 小时