算法基础课—搜索与图论(二)树与图的存储方式、及其深度优先搜索与广度优先搜索、拓扑排序

本文详细介绍了树与图的存储方式,重点讲解了邻接表的概念,并探讨了树和图的深度优先搜索与宽度优先搜索。此外,还深入讨论了有向无环图的拓扑排序,包括算法思想、实现代码以及如何找出所有可能的拓扑序列。
摘要由CSDN通过智能技术生成

算法基础课—搜索与图论(二) 树与图的存储方式、及其深度优先搜索与广度优先搜索、拓扑排序

树和图的存储方式

树——无环联通图
图——有向图、无向图
邻接矩阵——二维矩阵、邻接表(常用)——每个节点开一个单链表(有点类似hash里的拉链表)

邻接表

类似于拉链法

代码模板

// 对于每个点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);

树和图的深度优先搜索

反正也只走一次,所以恢不恢复好像都可以

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);
    }
}

树和图的宽度优先搜索

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

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

    for (int i = h
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值