zoukankan      html  css  js  c++  java
  • 链式前向星

    链式前向星实质为数组模拟链表。

    不妨设有n个顶点,m条边,首先为每条边编号为0~m-1.

    对每个顶点的一条边定义一个三元数组(to,w,next)。其中to为该边的终点,w为该边的权值,next为以该顶点出发的另一条边的编号,那如何从顶点找到对应边的编号呢,这时就引入了head数组,head为以该顶点出发的最后一条边的编号。

    void  add_edge(int u, int v, int w)//u为起点,v为终点,w为权值
    {
         edge[cnt].to=v;
         edge[cnt].w=w;
         edge[cnt].pre=head[u];//记录上一条边的编号
         head[u]=cnt;//更新最后一条边的编号
         cnt++;//其实加边时为从上往下,遍历时为从下往上
    }

    遍历时只需要从每一个顶点出发(for从1~n)

    再从每一个顶点的head[i]出发搜索出以该顶点出发的所有边。


    for(i=1;i<=n;i++){//n为顶点数 for(j=head[i];j!=-1;j=edge[j].next){//next其实就是同一顶点的上一条边 printf("%d %d %d",i,edge[j].to,edge[j].w); //edge数组是存边,head数组是存每个顶点的最后一条边,head相当于为edge提供了由头,从顶点到边的转换 } }

     至于初始问题,因为边的编号为0~m-1,所以初始值就不能为0,所以-1;

    如果边的编号从1开始,初始值则可以改动。

  • 相关阅读:
    python多线程多进程
    python单元测试unittest
    python学习笔记(一):python简介和入门
    今天的收获!!!
    Python django
    React router
    30分钟掌握ES6/ES2015核心内容
    webpack+React.js
    我喜欢的两个js类实现方式 现在再加上一个 极简主义法
    js实现的笛卡尔乘积-商品发布
  • 原文地址:https://www.cnblogs.com/Fish-/p/13454285.html
Copyright © 2011-2022 走看看