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开始,初始值则可以改动。

  • 相关阅读:
    Leetcode 217 存在重复
    Leetcode 125验证回文串
    HTML标签
    Having dreams is what makes life tolerable.
    Database数据库——MySQL简述
    Python实践之路8——选课系统
    Python学习之路16——线程、进程和协程
    Python实践之路7——计算器
    Python学习之路14——Socket
    Python学习之路13——异常处理
  • 原文地址:https://www.cnblogs.com/Fish-/p/13454285.html
Copyright © 2011-2022 走看看