• 第6章学习心得


    第六章学习了图

    一、图的储存方式——邻接矩阵、邻接表、十字链表和邻接多重表

    1、邻接矩阵是表示顶点之间相邻关系的矩阵

    2、邻接表是图的一种链式存储结构,邻接表由表头结点表(数据域和链域)和边表(邻接点域、数据域和链域)

    typedef struct ArcNode
    {// 边结点
       int adjvex;
       struct ArcNode *nextarc;
       OtherInfo info;
    }ArcNode;
    
    typedef struct Vnode
    {// 顶点信息
       VerTexType data;
       ArcNode *firstarc;
    }Vnode,AdjList[max];
    
    typedef struct
    {// 邻接表
       AdjList verices;
       int vexnum,arcnum;
    }ALGraph;
    

    3、十字链表:有向图的邻接表和逆邻接表结合起来的一种链表

    4、邻接多重表:无向图的另一种链式存储结构

    二、图的遍历——深度优先和广度优先

    1、深度优先(DFS)类似于树的先序遍历

    邻接矩阵的深度优先

    void DFS_AM(AMGraph G,int v) 
    {  //图G为邻接矩阵类型,从第v个顶点出发深度优先搜索遍历图G
    cout<<v;visited[v]=true; //访问第v个顶点,并置访问标志数组相应分址值为true
    for(w=O;w<G.vexnum;w++) 
    //依次检查邻接矩阵 v所在的行
    
    if((G.arcs[v] [w] !=O}&&(!visited[w]}} DFS(G,w}; 
    
    //G.arcs[v] [w] ! =0  表示w是v的邻接点, 如果w未访问, 则递归调用DFS
    }

    邻接链表的深度优先

    void DFS_AL (ALGraph G,int v) 
    {//图G为邻接表类型, 从第v个顶点出发深度优先搜索遍历图G
    
    cout<<v;visited[v]=true; //访问第v个顶点,并置访问标志数组相应分量值为true
    p=G.vertices[v] .firstarc; //p指向v的边链表的第一个边结点
    while(p!=NULL) //边结点非空
      {
          w=p->adjvex;//表示w是v的邻接点
           if(!visited[w]) DFS(G,w); //如果w未访问, 则递归调用DFS
           p=p->nextarc; //p指向下一个边结点
       }
    }

    2、广度优先(BFS)——类似于树的按层次遍历,尽可能先对横向进行搜索

    三、图的应用

    主要的是:最小生成树(在一个连通网的所有生成树中,各边的代价和最小的那棵树成为最小生成树)

    普里姆算法(Prjm算法):“加点法”(逐步增加U中的顶点)

    克鲁斯卡尔算法(Kruskal算法):“加边法”(逐步增加生成树的边)

    ** 要求能够看懂代码

    还有  最短路径--从源点到其余各顶点的最短路径

    迪杰斯特拉算法(按照路径长短递增的次序产生最短路径)

    四、总结

    虽然这一章的内容比较少,知识点也是不怎么多,大部分也容易理解,但是实际上要实现代码的话还是很难的。对于图,包括它的存储,遍历,应用,在代码方面还是比前面学的树、线性表更为复杂。在图中任意两个结点的关系都是有可能相关的,两个结点之间的边有可能是空,有可能是有向、无向,图又能根据边或弧的多少分为稀疏图和稠密图。

    这几次上课都有好好地总结笔记,看代码,希望自己下一阶段也能保持这种认真的态度,加油!!!

  • 相关阅读:
    Flink SQL Client初探
    ansible快速部署cassandra3集群
    利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料)
    spark读取HDFS目录时报错Failed on local exception: com.google.protobuf.InvalidProtocolBufferException
    Spark学习进度-Spark环境搭建&Spark shell
    jquery获取select选中的值
    java零基础到架构师学习线路(附视频教程)
    plsql连接远程oracle数据库
    如何在通用异常处理时获取到方法名称(获取注解参数JoinPoint)
    java:找不到符号(使用lombok)
  • 原文地址:https://www.cnblogs.com/lsy-273700263/p/13127276.html
Copyright © 2020-2023  润新知