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

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网与关键路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值