深搜,广搜的个人理解

深搜DFS

void dfs(int x,int y){
    v[x][y]=1;
    for(int h=-1;h<=1;h++){
        for(int l=-1;l<=1;l++){
            int xx=x+h,yy=y+l;
            if(xx>=0&&xx<=n-1&&yy>=0&&yy<=m-1&&v[xx][yy]==0&&s[xx][yy]=='W'){
                dfs(xx,yy);
            }
        }
    }
}

广搜BFS 

void bfs(int x,int y){
    queue<node>stk;
    node a,b;
    v[x][y]=1;
    a.x=x;
    a.y=y;
    stk.push(a);
    while(!stk.empty()){
        a=stk.front();
        stk.pop();
        for(int i=0;i<=7;i++){
            b.x=a.x+d[i][0];
            b.y=a.y+d[i][1];
            if(s[b.x][b.y]=='W'&&v[b.x][b.y]==0&&b.x>=0&&b.x<=n-1&&b.y>=0&&b.y<=m-1){
                stk.push(b);
                v[b.x][b.y]=1;
            }
        }
    }
}

周围一圈方块搜索可以用两个for循环解决,比起使用d[i][0]与d[i][1] 来说跟稳一点。

说实话深搜广搜都不难,只是一种递归、递推的思想,具体的题目应该具体分析。 

猜你喜欢

转载自blog.csdn.net/weixin_42634193/article/details/81360904
今日推荐