码迷,mamicode.com
首页 > 其他好文 > 详细

第六章学习小结

时间:2019-05-20 00:46:33      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:bre   小结   信息   复杂   code   cno   适合   适用于   广度   

(一)邻接表和邻接矩阵

图的存储结构,有邻接矩阵表示法和邻接矩阵表示法两种。

邻接矩阵通过矩阵来存储图的信息,其算法的时间复杂度为O(n^2);邻接表通过链式存储结构来存储图的信息,其算法的时间复杂度为O(n+e);因为邻接矩阵表示法不便于增加和删除顶点,空间效率低,所以相对于邻接表而言,邻接矩阵更适合用于稠密图,而稀疏图更适合用于邻接表。

采用邻接矩阵表示法,创建无向网
Status CreateUDN(AMGraph &G)  //G.vexnum:总顶点数;G.arcnum:总边数;MaxInt:极大值
{
    cin>>G.vexnum>>G.arcnum;  //输入总顶点数,总边数 
    
    for(i=0;i<G.vexnum;++i)        
        cin>>G.vexs[i];           //依次输入点的信息 
    
    for(i=0;i<G.vexnum;++i)       
        for(j=0;j<G.vexnum;++j)
            G.arcs[i][j] = MaxInt; //初始化,权值都置为极大值MaxInt 
    
    for(k=0;k<G.arcnum;++k)   
    {
        cin>>v1>>v2>>w;
        i=LocateVex(G,v1);j=LocateVex(G,v2); //确定v1和v2在矩阵中的位置,既顶点数组的下标
        G.arcs[i][j] = w;
        G.arcs[j][i] = G.arcs[i][j]; 
     } 
     return OK;
}
图的邻接表存储方式
#define MVNum 100 //最大顶点数
typedef struct ArcNode //边结点 
{
    int adjvex;  //该边所指向的顶点的位置
    struct ArcNode *nextarc; //指向下一条边的指针
    OtherInfo info; //和边相关的信息 
 } ArcNode;
 typedef struct VNode
 {
     VERtexType data;
     ArcNode *firstarc;
 }VNode,AdjList[MVNum];
 typedef struct
 {
     ADjList vertics;
     int vexnum, arcnum; //图当前顶点数和边数 
 }SLGrapg;

(二)图的遍历

深度优先搜索(Depth First Search,DFS)遍历类似于树的先序遍历,是树先序遍历的推广。

广度优先搜索(Breadth First Search,BFS)遍历类似于树的按层次遍历的过程。

(三)最小生成树

图G的生成树是:包含G的全部顶点的极小连通子图。最小生成树的边数=图的顶点数-1。

最小生成树的算法有普里姆算法和克鲁斯卡尔算法两种。

普里姆算法:时间复杂度O(n^2),适用于稠密图

克鲁斯卡尔算法:时间复杂度O(Elog2e),适用于稀疏图

(四)最短路径的算法

算法的实现主要的难点在于需要引入辅助的数据结构。

(1)二维数组Path[i][j]:最短路径上顶点vj的前一顶点的序号。

(2)二维数组D[i][j]:记录顶点vi和vj之间的最短路径长度。

第六章学习小结

标签:bre   小结   信息   复杂   code   cno   适合   适用于   广度   

原文地址:https://www.cnblogs.com/smallsprings/p/10891592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!