dfs和bfs的详细理解

看了网上很多博客,对于dfs和bfs还是理解的不是很清楚,记模板也并没有什么用,很快就会忘记。所以还是自己能够理解才能真正掌握。

1:dfs

dfs中最常用的方法就是递归和回溯了。

以油田问题为例(http://acm.hdu.edu.cn/showproblem.php?pid=1241),在油田问题中,我们相当于是仅仅需要遍历图形一次,所以我们只需要一直搜下去,一直搜下去,直到无路可走。如果是回溯的话,是因为我要找到的解,可能在我以前的路径当中。

void dfs(int s,int h)
{
    int sx,sy;
    dis[s][h]=1;
    for(int x=0;x<8;x++)
    {
        sx=s+dir[x][0];
        sy=h+dir[x][1];
        if(maps[sx][sy]!='@'|| dis[sx][sy]==1) continue;
        dfs(sx,sy);
    }
}

2:bfs

为什么bfs能解决最短路径问题,因为他是一层一层的遍历的,所以他是从在靠近源点的遍历,所以当我们在寻找最优解的时候,找到合适的,就一定是最优的解。因为我们是做的是先进来的先访问,所以肯定是需要用到队列的。

猜你喜欢

转载自blog.csdn.net/hujinhong145/article/details/88020462