• 无向图的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 = 边的编号 。


  • 相关阅读:
    横竖屏
    iOS/Android·全球
    POKEMON GO(口袋妖怪)一起玩
    自定义宏
    设置button图片和文字
    iOS10 降级版本到9.几
    1.安装Loucust
    python小程序打包
    Jmeter GIS调用-->参数化+正则表达式提取器+后置处理器+逻辑控制器
    装PIL库
  • 原文地址:https://www.cnblogs.com/shawn-ji/p/5687016.html
Copyright © 2020-2023  润新知