zoukankan      html  css  js  c++  java
  • 无向图的DFS遍历(方法之一)

    如果看不懂辅助解释在后面第5


    1、录入方式:

    输入 u - v  表示一边的2个端点

    2、存储结构

    struct edge
    {
        int from;
        int to;
        int next;
    } e[MAXN];
    
    int head[MAXN];   //head[u]表示 以u为父节点的边链表的头

    3、建图方法

    void build(int u, int v)
    {
        e[cnt].from = u;
        e[cnt].to = v;
        e[cnt].next = head[u];// next = 之前u为父节点的边的编号
        head[u] = cnt;//更新head[u]
        cnt++;
    }
    
            cin>>u>>v;
            build(u,v);
            build(v,u);    

    4、DFS函数编写

    void dfs(int u)
    {
        int edge = head[u];
        for(int i = edge; i != -1; i = e[i].next )
        {
            vis[u] = 1;
            int v = e[i].to;
            if(vis[v] == 0)
            {
                dfs(v);
            }
        }
        return ;
    }

     


    5、一些解释:

     总体方法是head[u]存放以u(顶点)为from的边的编号,通过head[u]找到一条边,并且这条边是 一系列以u为from的边 组成的链表的头,通过这个头用链表的方式(e[i].next)去遍历所有以u为from的边  。  所以数据类型是这样的 : head[顶点编号] = 边的编号 ;   e[边的编号].next = 边的编号 。


  • 相关阅读:
    快速幂算法
    素数筛
    数论知识点总结
    ABOUT MY NAME
    CF1043F Make It One
    树形DP
    魔兽世界联盟8.1主线任务
    模板std::mutex用法:
    【转】正确的提问方式
    第一个Python游戏窗口
  • 原文地址:https://www.cnblogs.com/shawn-ji/p/5687016.html
Copyright © 2011-2022 走看看