图的基本术语,邻接矩阵、邻接表表示方法

简介: 图的基本术语,邻接矩阵、邻接表表示方法

图的定义

图是一种与线性表和树相比更复杂的数据结构,在图形结构中,结构之间的关系可以是任意的,图中任意两个元素之间都可能相关

图(Graph)是由顶点的有穷非空集合顶点之间边的集合组成,通常表示为:G(V,E),其中G表示一个图,V是图G中顶点的集合,E是图中边的集合,顶点也就是树中的结点。

图的分类

无向边:若顶点vi到vj之间的边没有方向,则称这条边为无向边,用(vi,vj)表示。最多为n(n-1)/2条边。

有向边:若vi到vj之间有方向,称为有向边,则用<vi,vj>表示,最多有n(n-1)条

有向图的权

有些图或弧具有与它相关的数字,这种与图的边或弧相关的树叫做权(Weight)

这些权可以表示从一个顶点到另一个顶点的距离或耗费,这种带权的图通常称为网(Network)

子图

连通性

在无向图G中如果两个点之间有路径可以到达,则称这两个点是连通的。如果对于图中任意两个顶点都可以到达,则会称G为连通图。

邻接矩阵

图的邻接矩阵储存方法是用两个数组表示

一个一维数组存储图中顶点信息

一个二维数组(邻接矩阵)储存图中的边或者弧的信息

为1表示两个点是连通的

邻接矩阵

邻接矩阵储存的结构

typedef char VertexType;           //定义顶点类型
typedef int EdgeType;              //边上权值类型由用户定义
#define MAXVEX 100                 //最大顶点数
#define INFINITY 65535             //表示两个顶点不连通
typedef srtuct{
    VertexType vexs[MAXVEX];       //顶点表
    EdgeType arc[MAXVEX][MAXVEX];  //边表
    int numVertexes,numEdges;      //图中当前的顶点数和边数
}MGraph;

领接表

图中顶点用一个一维数组储存,当然顶点也可以用单链表储存,不过数组可以较容易地读取顶点信息。另外对于顶点数组中,每个数据元素还需要储存指向第一个邻接点地指针,以便于查找该顶点的边信息。

邻接表的存储的结构

typedef char VertexType;   //顶点类型
typedef int EdgeType;      //边的权值
typedef struct EdgeNode{   
    int adjvex;            //存储该顶点对应的下表
    EdgeType weight;       //用于储存权值,对于非网图不需要
    struct EdgeNode *next; //链域,指向下一个邻接点
}EdgeNode;

邻接矩阵储存的结构

typedef struct VertexNode{          //顶点表结构,就一个信息和一个尾巴
    VertexType data;               //顶点域,存储顶点信息
    EdgeNode *firstedge;            //边表头指针
}VertexNode,AdjList[MAXVEX];
typedef struct{
    AdjList adjList;             //结构体数组
    int numVertexes,numEdges;       //图中当前顶点数和边数     
}GraphAdjList;
相关文章
|
2月前
|
C语言
数据结构基础详解(C语言):图的基本概念_无向图_有向图_子图_生成树_生成森林_完全图
本文介绍了图的基本概念,包括图的定义、无向图与有向图、简单图与多重图等,并解释了顶点度、路径、连通性等相关术语。此外还讨论了子图、生成树、带权图及几种特殊形态的图,如完全图和树等。通过这些概念,读者可以更好地理解图论的基础知识。
|
5月前
|
存储
技术心得记录:图的概念和存储(邻接矩阵,邻接表)
技术心得记录:图的概念和存储(邻接矩阵,邻接表)
24 0
|
C++ 索引
探索图论:无向图、有向图、加权图与无权图
引言 图论是数学中的一个精彩分支,通过图这种数据结构,我们可以更好地理解和分析现实世界中事物之间的关系。在图论中,有四种基本的图类型:无向图、有向图、加权图和无权图。本文将深入探讨这些图的概念,并通过C++代码示例帮助读者更加清晰地理解它们在抽象世界和实际问题中的应用。
761 0
|
存储
图操作之邻接矩阵与邻接表的深度优先遍历
图操作之邻接矩阵与邻接表的深度优先遍历
173 0
|
算法 C语言 C++
数据结构 图连通与最小生成树(下)
数据结构 图连通与最小生成树(下)
135 0
|
机器学习/深度学习 存储 算法
数据结构 图连通与最小生成树(上)
数据结构 图连通与最小生成树
130 0
|
存储 算法 C++
C++实现图 - 03 最小生成树
这一讲来讲一个图中非常重要的内容 —— 最小生成树,在此之前我们先来回顾一下生成树的概念。
225 0
C++实现图 - 03 最小生成树
|
存储
【32. 图中的层次(图的广度优先遍历)】
思路 - 因为所有的`边长都为1`,所以可以使用`宽度优先搜索`的思想,每当队列pop出一个元素时,将其距离为1的节点都加到队列中(层次遍历思想) - `st[]`标记各个节点有没有走过,`d[]`保存1号节点到各个节点的距离,初始时都为-1。
145 0
【32. 图中的层次(图的广度优先遍历)】
|
存储 算法 搜索推荐
C++实现图 - 05 拓扑排序
今天来讲另一个非常重要的知识点 —— 拓扑排序。咋一看好像是一个排序算法,然而它和排序扯不上半点关系,它可以用于判断我们的图中是否存在有向环。
608 0
C++实现图 - 05 拓扑排序