您现在的位置是:首页 >其他 >review 并查集+DFS+BFS网站首页其他

review 并查集+DFS+BFS

你柚猫腻 2025-03-24 12:01:02
简介review 并查集+DFS+BFS

并查集:

 

查找:

int p[N];//定义多个集合

int find(int x)
{
    if(p[x]!=x) p[x]=find(p[x]);
    /*
    经上述可以发现,每个集合中只有祖宗节点的p[x]值等于他自己,即:
    p[x]=x;
    */
    return p[x];
    //找到了便返回祖宗节点的值
}

合并:

p[find(a)] = find(b);

DFS+BFS:

DFS:

DFS没有模板,最重要的是搜索顺序。用什么顺序遍历所有方案

void dfs(当前状态)
{
    if(当前状态是目标状态) //判断
       进行相应处理(输出当前解、更新最优解、退出返回等)
    // 扩展
    for(所有可行的新状态)
    {
        if(新状态没有访问过 && 需要访问) //可行性剪枝、最优性剪枝、重复性剪枝
        {
            标记
            dfs(新状态);
            取消标记
            恢复现场
        }
    }
}

BFS:

搜索顺序是一层一层的,一般的搜索问题要求输出最优解先考虑BFS,一层一层搜只要搜到就结束,搜到的一定是最优的。

// 判重数组st[]
//设置偏移量
queue定义队列并初始化
while(queue 非空)
{
    t取队头元素
    for(拓展 t )
    {
        int x,y;//(新节点)+用偏移量
        if(!st[])
        {
            //将新节点入队
        }
    }
}

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。