当前位置: 首页 > news >正文

图的基本概念

1. 图的定义

定义:图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的;其中,点通常被成为"顶点(vertex)",而点与点之间的连线则被成为"边或弧"(edege)。通常记为,G=(V,E)。

2. 图的种类

根据边是否有方向,将图可以划分为:无向图有向图

2.1 无向图

上面的图G0是无向图,无向图的所有的边都是不区分方向的。G0=(V1,{E1})。其中,

(01) V1={A,B,C,D,E,F}。 V1表示由"A,B,C,D,E,F"几个顶点组成的集合。 
(02) E1={(A,B),(A,C),(B,C),(B,E),(B,F),(C,F), (C,D),(E,F),(C,E)}。 E1是由边(A,B),边(A,C)...等等组成的集合。其中,(A,C)表示由顶点A和顶点C连接成的边。

2.2 有向图

上面的图G2是有向图。和无向图不同,有向图的所有的边都是有方向的! G2=(V2,{A2})。其中,

(01) V2={A,C,B,F,D,E,G}。 V2表示由"A,B,C,D,E,F,G"几个顶点组成的集合。 
(02) A2={<A,B>,<B,C>,<B,F>,<B,E>,<C,E>,<E,D>,<D,C>,<E,B>,<F,G>}。 E1是由矢量<A,B>,矢量<B,C>...等等组成的集合。其中,矢量<A,B)表示由"顶点A"指向"顶点C"的有向边。

3. 邻接点和度

3.1 邻接点

一条边上的两个顶点叫做邻接点。 
例如,上面无向图G0中的顶点A和顶点C就是邻接点。

在有向图中,除了邻接点之外;还有"入边"和"出边"的概念。 
顶点的入边,是指以该顶点为终点的边。而顶点的出边,则是指以该顶点为起点的边。 
例如,上面有向图G2中的B和E是邻接点;<B,E>是B的出边,还是E的入边。

3.2 度

在无向图中,某个顶点的度是邻接到该顶点的边(或弧)的数目。 
例如,上面无向图G0中顶点A的度是2。

在有向图中,度还有"入度"和"出度"之分。 
某个顶点的入度,是指以该顶点为终点的边的数目。而顶点的出度,则是指以该顶点为起点的边的数目。 
顶点的度=入度+出度。 
例如,上面有向图G2中,顶点B的入度是2,出度是3;顶点B的度=2+3=5。

4. 路径和回路

路径:如果顶点(Vm)到顶点(Vn)之间存在一个顶点序列。则表示Vm到Vn是一条路径。 
路径长度:路径中"边的数量"。 
简单路径:若一条路径上顶点不重复出现,则是简单路径。 
回路:若路径的第一个顶点和最后一个顶点相同,则是回路。 
简单回路:第一个顶点和最后一个顶点相同,其它各顶点都不重复的回路则是简单回路。

5. 连通图和连通分量

连通图:对无向图而言,任意两个顶点之间都存在一条无向路径,则称该无向图为连通图。 对有向图而言,若图中任意两个顶点之间都存在一条有向路径,则称该有向图为强连通图。

连通分量:非连通图中的各个连通子图称为该图的连通分量。

6. 权

在学习"哈夫曼树"的时候,了解过"权"的概念。图中权的概念与此类似。

上面就是一个带权的图。

图的存储结构

上面了解了"图的基本概念",下面开始介绍图的存储结构。图的存储结构,常用的是"邻接矩阵"和"邻接表"。

1. 邻接矩阵

邻接矩阵是指用矩阵来表示图。它是采用矩阵来描述图中顶点之间的关系(及弧或边的权)。 
假设图中顶点数为n,则邻接矩阵定义为:


下面通过示意图来进行解释。

图中的G1是无向图和它对应的邻接矩阵。

图中的G2是无向图和它对应的邻接矩阵。

通常采用两个数组来实现邻接矩阵:一个一维数组用来保存顶点信息,一个二维数组来用保存边的信息。 
邻接矩阵的缺点就是比较耗费空间。

2. 邻接表

邻接表是图的一种链式存储表示方法。它是改进后的"邻接矩阵",它的缺点是不方便判断两个顶点之间是否有边,但是相对邻接矩阵来说更省空间。

图中的G1是无向图和它对应的邻接矩阵。

图中的G2是无向图和它对应的邻接矩阵。

 转至:http://www.cnblogs.com/skywang12345/p/3691463.html

相关文章:

  • MySQL主从复制、搭建、状态检查、中断排查及备库重做
  • Java序列化 Seriallizable 和 Externalizable
  • 省级网站群建设关注点
  • linux 标准I/O (一)
  • script的defer
  • 网络编程释疑之:TCP连接拔掉网线后会发生什么
  • webkit浏览器渲染影响因素分析
  • nginx+tomcat+mysql架构搭建
  • JVM运行时(框架图)
  • TreeSet排序和HashSet去重
  • Cocos2d-x编程中的runOnUiThread方法和runOnGLThread方法剖析
  • DML数据操作语言之常用函数
  • Oracle Dedicated server 和 Shared server(专用模式 和 共享模式) 说明(转)
  • 修改mysql的编码
  • (轉)JSON.stringify 语法实例讲解
  • 「面试题」如何实现一个圣杯布局?
  • 0基础学习移动端适配
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • ES6系统学习----从Apollo Client看解构赋值
  • javascript 总结(常用工具类的封装)
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • java多线程
  • Java基本数据类型之Number
  • LeetCode18.四数之和 JavaScript
  • Linux gpio口使用方法
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • React+TypeScript入门
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 大快搜索数据爬虫技术实例安装教学篇
  • 和 || 运算
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 盘点那些不知名却常用的 Git 操作
  • 使用common-codec进行md5加密
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 一道闭包题引发的思考
  • 移动端解决方案学习记录
  • scrapy中间件源码分析及常用中间件大全
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $L^p$ 调和函数恒为零
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (接口封装)
  • (接口自动化)Python3操作MySQL数据库
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转载)OpenStack Hacker养成指南
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .net 7 上传文件踩坑
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Framework杂记
  • .NET 使用 XPath 来读写 XML 文件