AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

树和图的存储与搜索

作者: 作者的头像   lhqwd ,  2021-02-22 18:14:56 ,  阅读 22


0


存储

int h[M];   //每个结点都有一个头结点
int e[M];   //存储第i个点的value
int ne[M];  //存储第i个点的next
int idx;    //序号

//初始化
void init()
{
    memset(h, -1, sizeof h);
}

//插入一个有a到b的边
void add(int a, int b)
{
    e[idx] = b;
    ne[idx] = h[a];
    h[a] = idx;
    idx ++;
}

遍历(dfs)

int st[M];  //存储结点是否被访问过

void dfs(int u)     //访问u结点
{
    st[u] = 1;      //标记为访问过

    //开始访问u的所有子节点
    for (int i = h[u]; i != -1; i = ne[i]){

        int j = e[i];   //下一个节点的编号

        if (!st[j])
            dfs(j);
    }

}

遍历(bfs)

void bfs()
{
    queue<int> q;
    st[1] = 1;      //从一号点开始
    q.push(1);

    while (q.size()){

        int u = q.front();
        q.pop();

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

            if (!st[j]){
                st[j] = 1;
                q.push(j);
            }

        }
    }    
}

0 评论

你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息