代码中用到的变量及数组的作用解析:
1. 变量cnt:用于迭代存入所有的边
2. head[x]数组:head[x]表示的是x最后读入的出边的编号(x为树的一个节点)
3. e[max*2]数组:表示树中所有边(例如e[0]表示第0号边)
4. vis[x]数组:记录该节点是否遍历过,若已遍历,则不考虑
建树以及dfs遍历
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=2e5+10;
struct edge
{
int to;
int next;
}e[maxn<<1];
int n;
int cnt=-1;
int head[maxn];
bool vis[maxn];
void init()
{
//memset(e,0,sizeof(e));
memset(head,-1,sizeof(head));
memset(vis,false,sizeof(vis));
cnt=-1;
}
void add_edge(int u,int v)
{
e[++cnt].to=v;
e[cnt].next=head[u];
head[u]=cnt;
}
void dfs(int x)
{
if(!vis[x])
{
cout<<x<<" ";
vis[x]=1;
for(in

本文介绍了树的前向星存储方法,详细解析了变量cnt、head[x]数组、e[max*2]数组和vis[x]数组在存储和遍历树过程中的作用。同时,提供了建树以及使用深度优先搜索(DFS)和广度优先搜索(BFS)遍历树的实现,并重点讨论了head数组在建树过程中的关键功能。作为作者的首篇博客,虽然风格严肃,但深入浅出地探讨了树结构的基础知识。
最低0.47元/天 解锁文章
944

被折叠的 条评论
为什么被折叠?



