BFS DFS模板

DFS:


深度优先搜索从最开始的状态出发遍历所有可以达到的状态。由此可以对所有的状态进行操作或者列出所有的状态。

模板:

//建立搜索区间
char map[][];

void dfs(int x,int y)
{
    //对此节点的操作
    
    //根据题目要求判断其他点
    for(int i = ; i < ; i++)
        if(符合条件)
            dfs();
    return ;
}


BFS:


宽度优先搜索也是搜索的手段之一,深度优先搜索利用了栈进行计算,而宽度优先搜索则利用了队列。搜索时首先将初始状态添加到队列里,此后从队列的最前端不断取出状态,把从该状态可以转移到的状态中尚未访问过的部分加入队列,如此往复,直至队列被取空或者找到了问题的解。

模板:

//建立搜索区,一维/二维/三维 根据题目需要
int map[];
//访问数组
int vis[];
//搜索节点,结构体里的变量根据题目要求建立
struct node
{
    int x,step;
};
//判断该节点是否符合条件
int check(node x)
{
    if()//符合
        return 1;
    return 0;
}

int bfs(int s,int e)
{
    memset(vis,0,sizeof(vis));//访问数组初始化
    queue <node> p;//建立队列
    
    //队列初始化,即把初值压入队列并标记
    node st;
    st.x = s;
    st.step = 0;
    vis[st.x] = 1;
    p.push(st);
    
    //循环队列判断
    while(!p.empty())
    {
        //依次取出队列元素直至空
        node now = p.front();
        p.pop;
        
        //判断是否符合结束条件
        if(st.x = e)
            return ;
        
        //判断是否符合加入队列的条件
        node next = now;
        //根据题目要求改变相应的值
        if(check(now.x))
        {
            //若满足条件,更新节点,标记,加入队列
        }
    }
    return -1;
}

猜你喜欢

转载自blog.csdn.net/Xuedan_blog/article/details/80789517