快去自定义签名吧~|

张詠然

园龄:3年5个月粉丝:3关注:3

树与图的存储与遍历

树图的存储与遍历

树是特殊的图,是无环连通图,所以只需要看图的存储

图分为两种:有向图和无向图

无向图可以看为有向图,把所有无向边都存两个有向边即可

有向图的存储:

  1. 邻接矩阵,g[a][b]存储a->b n^2,适合存储稠密图

  2. 邻接表(n个单链表)(推荐)

使用邻接表存储

树与图的dfs和bfs与搜索算法相似

树的dfs代码实现:

#include <iostream>
using namespace std;
const int N = 100010, M = N * 2; // 因为是双向连通图
int n, m;
int h[N], e[M], ne[M], idx;
bool st[N];
void add(int a, int b)
{
e[idx] = b;
ne[idx] = h[a];
h[a] = idx;
idx ++ ;
}
void dfs(int u)
{
st[u] = true;
for (int i = h[u]; i != -1; i = ne[i])
{
if (!st[e[i]]) dfs(e[i]);
}
}
int main()
{
memset (h, -1, sizeof h);
return 0;
}

树与图的bfs代码实现:

void bfs()
{
// bfs之前要memset(h, -1, sizeof h);
memset(d, -1, sizeof d);
q[0] = 1;
d[1] = 0;
int hh = 0, tt = 0; // 用队列来存当前可以往后遍历的点
while (hh <= tt)
{
int t = q[hh ++ ];
for (int i = h[t]; i != -1; i = ne[i])
{
int j = e[i];
if (d[j] == -1)
{
d[j] = d[t] + 1;
q[ ++ tt] = j;
}
}
}
}

本文作者:张詠然

本文链接:https://www.cnblogs.com/zyrddd/p/16597957.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   张詠然  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起