数据结构与算法(四)图与网

1. 图

图是由非空的顶点集合V和描述顶点间联系的弧(或边)的集合E组成的二元组,既G=(V,E)
有向图 :V={vi} ; E={<vi,vj>} , vi->vj
无向图 :V={vi} ; E=(<vi,vj>) , vi - j

n 表示顶点数,e 表示边或弧的数目

无向图:
    e 的取值范围 0 ~ n(n-1)/2
    有向完全图:e = n(n-1)/2 

有向图:
    e 的取值范围 0 ~ n(n-1)
    无向完全图:e = n(n-1)

稀疏图、稠密图

权:从一个顶点到一个顶点的权值
网:带权图
有向网、无向网

子图:G=(V,E) , G'=(V',E'),若V'属于V,E'属于E,则称G'为G的子图

顶点的度:依附于该顶点的边的数目,记作 TD(V)
    e = ∑TD(Vi)/2
有向图: 入度 ID(V) 以顶点为终点的边数
        出度 OD(V) 以顶点为起点的边数

路径:从一个顶点到另一个顶点的边或弧的集合
路径长度:边或弧的数目
简单路径:不出现重复顶点
简单回路/环:第一个顶点和最后一个顶点相同

连通:无向图如果从一个顶点Vi到另一个顶点Vj有路径,则称Vi和Vj是连通的
连通图:无向图中任意两个顶点都是连通的
连通分量:无向图的极大连通子图

强连通图:有向图中,任意两个顶点Vi、Vj,从Vi到Vj和从Vj到Vi都存在路径,则称有向图为强连通图
强连通分量:有向图的极大强连通子图

极小连通子图:一个连通图的生成树是该图的一个极小连通子图,图中包含全部的n个顶点和连通这n个顶点的n-1条边
非连通图中,每个连通分量都可以得到一个极小连通子图(生成树),这些连通分量的生成树构成了该非连通图的生成森林

2. 图与网的存储结构

2.1 邻接矩阵

/*
邻接矩阵
    用一维数组存储图或网的顶点信息,用二维数组表示顶点之间的邻接关系
    假设有n个顶点,则邻接矩阵A是n阶方阵

    无向图\有向图:A[i][j] = 1, (vi,vj)\<vi,vj> 属于 E
                            0, (vi,vj)\<vi,vj> 不属于 E

    无向网\有向网:A[i][j] = Wij, (vi,vj)\<vi,vj> 属于 E
                            无穷大, (vi,vj)\<vi,vj> 不属于 E
*/

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#define max_vernum 100
#define infinity 0XFFFFFFFF // 无穷大

typedef struct mgraph
{
    /* data */
};


int main()
{


    return 0;
}

2.2 邻接表与逆邻接表

2.3 邻接多重表

3. 图的遍历

3.1 深度优先遍历搜索

3.2 广度优先遍历搜索

4. 无向联通图的最小生成树

4.1 Prim算法

4.2 kruskal算法

5. 有向图的最短路径

5.1 单源最短路径

5.2 所有顶点之间的最短路径

6. 有向无环图

6.1 AOV网与拓扑排序

6.2 AOE网与关键路径

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值