DFS思路及模板

2020-07-28  本文已影响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~

上一篇 下一篇

猜你喜欢

热点阅读