美文网首页
DFS思路及模板

DFS思路及模板

作者: 全方位小白 | 来源:发表于2020-07-28 22:57 被阅读0次

    同样会有一天,如果你有了可以教给别人的东西,他们就能从你这儿学到,这种方式是美好的,有来有往的。这不是教育,而是历史,是诗歌。
    ——《麦田里的守望者》【美】杰罗姆•大卫•塞林格 ​​​​

    BFS和DFS一直是我的心病,每次看到相关的题目就发怵,今天还是简单总结一下:

    参考资料链接:BFS、DFS算法原理及代码模板(附模板题)

    DFS,也就是深度优先搜索,核心思想就是一条路找到底,然后回退一步换一个方向继续。有一个细节是,需要在出递归时把回退到的当前节点标为可访问,
    DFS模板:

    DFS(int x, int y) //这里假设存的是二维数组,x、y表示两个坐标
    {
         if (找到解)
         {
         }
          for (......)
     //每到一个点下一步都有上下左右四个方向可以走,这里用一个循环遍历方向数组表示四个方向
            {
                // 如果这个点(a,b)符合要求并且没走过
                flag[a][b] = 1; //标记‘1’表示走过
                DFS(a, b);      //进入下一次递归
                flag[a][b] = 0; //回溯,标记‘0’表示可以走
            }
    }
    }
    

    BFS,即广度优先搜索,一般借助队列实现,每次把当前可达的点一次放入队列,寻找下一个节点时继续把可达的节点加到队列后。这样当队列为空时即完成了对所有点的搜索。
    BFS模板:

    BFS()
    {
           queue<int> q;//初始化队列Q 
           while(!q.empty())  //队列不为空
           {
                   if() //判断是否找到了目标
                   {
    
                   }
                   //队首出队
                   for()
                   {
                           //依旧是四个方向
                           //符合条件的入队
                           //标记入队的点
                   }
           }
    }
    

    对于不会的事情,就要及时去跟进,及时学会,那就是提升点,一直拖延,就会成为阿克琉斯之踵。
    over~

    相关文章

      网友评论

          本文标题:DFS思路及模板

          本文链接:https://www.haomeiwen.com/subject/qtaqrktx.html