zoukankan      html  css  js  c++  java
  • 图的储存方式,链式前向星最简单实现方式 (边集数组)

    对于图来说,储存方式无非就是邻接矩阵、邻接表,今天看了看链式前向星的储存方式,说来说去不还是链表,是一种链表的简单的实现方式,还是比较好理解的。看他们写个结构体,个人不喜欢,没必要,也嫌麻烦,换一种更常见的方法。

    #define maxn 10010 
    //定义顶点个数,个人不太习惯用const int ,因为const int 会开空间,占空间是一个原因,第二是因为C++ MinGW 的原因容易在使用中出问题,被坑不止一次,可能是非洲人
    
    int tot=0;//图储存空间的假指针
    int head[maxn];//表头,用于存图的的左端点
    int next[maxn*100];//链式前向星的精髓,对于一个左端点他的右端点,用链式存储,一会有图解。
    int ege[maxn*100];//储存边权
    int ver[maxn*100];//储存右端点
    
    void add(int x,int y,int e) //建图,在图中添边
    {
        ver[tot++]=y;
        next[tot]=head[x];
        ege[tot]=z;
        head[x]=tot;
    
        //如果是无向图可以在这里反向添边,也可以在使用时,反向使用一边,例如最短路松弛操作
    }
    
    for(int i=head[x];i;i=next[i]) //遍历以X为左端点的边
    {
        int L=x; // 左端点    
        int R=ver[i]; //右端点
        int eg=ege[i]; //权值
    }

    思想很简单,next放的是一条链的伪指针,指向同为x1右端点的下一个坐标,即数组下标。ege,ver,实在数组下标中把需要的信息存储,一个是右端点另一个是权值,如果数组下标比成地址,next就是指针,指向这个点的信息的指针。

    【边集数组】

    边集数组是由两个一维数组构成,一个是存储顶点的信息,另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标(begin),终点下标(end)和权(weight)组成。

    所以链式前向星,也是一种边集数组。

  • 相关阅读:
    ArchLinux新版本(pacstrap安装)及国内较优源推荐
    [转载]打造自己喜欢的Linux桌面----archlinux
    ArchLinux下LXDE的安装与设置心得
    [转载]linux 文件改名,移动
    SaaS(软件即服务)架构设计
    临时表空间
    DTCMS自定义标签,获取所有栏目以及获得二级子栏目导航
    Druid简介
    jeecg 模糊查询
    JEECG中的模糊查询
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798798.html
Copyright © 2011-2022 走看看