美文网首页
第三章 搜索与图论模板

第三章 搜索与图论模板

作者: burningrain | 来源:发表于2021-04-04 23:48 被阅读0次

树与图的存储
树是一种特殊的图,与图的存储方式相同。
对于无向图中的边ab,存储两条有向边a->b, b->a。
因此我们可以只考虑有向图的存储。
(1) 邻接矩阵:g[a][b] 存储边a->b
(2) 邻接表:

// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点
int h[N], e[N], ne[N], idx;

// 添加一条边a->b
void add(int a, int b)
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}

// 初始化
idx = 0;
memset(h, -1, sizeof h);

树与图的遍历
时间复杂度 O(n+m), n 表示点数,m表示边数
(1) 深度优先遍历 —— 模板题 AcWing 846. 树的重心

int dfs(int u)
{
    st[u] = true; // st[u] 表示点u已经被遍历过

    for (int i = h[u]; i != -1; i = ne[i])
    {
        int j = e[i];
        if (!st[j]) dfs(j);
    }
}

(2) 宽度优先遍历 —— 模板题 AcWing 847. 图中点的层次

queue<int> q;
st[1] = true; // 表示1号点已经被遍历过
q.push(1);

while (q.size())
{
    int t = q.front();
    q.pop();

    for (int i = h[t]; i != -1; i = ne[i])
    {
        int j = e[i];
        if (!st[j])
        {
            st[j] = true; // 表示点j已经被遍历过
            q.push(j);
        }
    }
}

拓扑排序 —— 模板题 AcWing 848. 有向图的拓扑序列
时间复杂度 O(n+m), n 表示点数,m 表示边数

bool topsort()
{
    int hh = 0, tt = -1;

    // d[i] 存储点i的入度
    for (int i = 1; i <= n; i ++ )
        if (!d[i])
            q[ ++ tt] = i;

    while (hh <= tt)
    {
        int t = q[hh ++ ];

        for (int i = h[t]; i != -1; i = ne[i])
        {
            int j = e[i];
            if (-- d[j] == 0)
                q[ ++ tt] = j;
        }
    }

    // 如果所有点都入队了,说明存在拓扑序列;否则不存在拓扑序列。
    return tt == n - 1;
}

相关文章

  • 第三章 搜索与图论模板

    树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我...

  • 第三章 搜索与图论

    AcWing 842. 排列数字[https://www.acwing.com/activity/content/...

  • 图论与图搜索

    关于图论的知识很早就想给自己做一个整理,关于图的知识,应该是算法与数据结构里面最有意思的一部分了,也是我个人很喜欢...

  • 图论模板总结

    前言:图论那几个算法真的比较容易忘记,今天就来复习一下吧 0X00 模板总结 Dijkstra 算法本身就是用来求...

  • 搜索与回溯算法模板及其应用

    本文介绍了搜索与回溯算法模板及其应用,主要包括: 【1】 搜索与回溯算法基本思想【2】模板算法1及其应用(素数环问...

  • Elasticsearch系列---几个高级功能

    概要 本篇主要介绍一下搜索模板、映射模板、高亮搜索和地理位置的简单玩法。 标准搜索模板 搜索模板search te...

  • 图论相关算法模板

    许多书上的算法可能是为了易懂,显得比较冗长,这里尽可能给出简洁的实现: Bellman-Ford最短路算法 注意,...

  • 美团 EasyReact 源码剖析:图论与响应式编程

    美团 EasyReact 源码剖析:图论与响应式编程 美团 EasyReact 源码剖析:图论与响应式编程

  • 75_elasticsearch高手进阶_使用search te

    75_elasticsearch高手进阶_使用search template将搜索模板化 搜索模板,search ...

  • Elasticsearch search template将搜索

    搜索模板,search template,高级功能,就可以将我们的一些搜索进行模板化,然后的话,每次执行这个搜索,...

网友评论

      本文标题:第三章 搜索与图论模板

      本文链接:https://www.haomeiwen.com/subject/qkurkltx.html