图的基本知识

1.简介

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

图是一种复杂的非线性结构,在图结构中,每个元素都可以有零个多个前驱,也可以有零个或多个后继,元素之间的关系是任意的。

2.分类

图分无向图和有向图

无向图:由顶点和边构成;

有向图:由顶点和弧(有向边)构成,弧分弧头和弧尾

多重图:关联一对顶点的无向边(或有向边,边的方向一致)多于1条(称这些边为平行边)

简单图:既不含平行边也不含环的图成为简单图

(有向)完全图:如果任意两个顶点之间都存在边叫完全图,有向的边叫有向完全图

连通图:在无向图G中,任意两个顶点是相通的就是连通图

网:图中的边带权值的话,叫网

3.图的顶点和边

顶点的度:顶点关联边的数目

有向图中:入度,方向指向顶点的边;出度,方向背向顶点的边

路径长度:路径上边或弧的数目

4.存储结构

4.1.邻接矩阵

图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

实际中,我们发现对于边数相对顶点较少的图,这种结构存在对存储空间的极大浪费。

4.2.邻接表

图的邻接表存储方式是用一个一维数组存顶点,数组中每一项还需要存储指向下一个邻接点的指针,以便于查找该顶点的边信息。图中每个顶点的所有邻接点构成一个线性表,由于邻接点不定,故用单链表存储。

 

5.遍历

5.1.深度优先遍历

深度优先遍历(DFS,也称深度优先搜索):假设给定图G的初态是所有顶点均未曾访问过。在图G中任选一点Vi为初始出发点(源点),则深度优先遍历如下:首先访问出发点Vi,并将其标记为已访问过;然后依次从Vi出发探索Vi的每个邻接点Wj。若Wj未曾访问过,则以Wj为新的出发点继续进行深度优先遍历,直至图中所有与源点Vi有路径相通的顶点均已被访问为止。如此时图中任有未被访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。

5.2.广度优先遍历

广度优先遍历(BFS,也称广度优先搜索):这是一种盲目搜索法,它会系统的展开并检查图中的所有节点,不考虑搜索目标,一层一层逐层向下遍历,直至遍历完整张图。

 

参考资料:《大话数据结构》

转载于:https://www.cnblogs.com/xuchaoi/p/7843978.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象之封装

封装的两个含义: 1.把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类); 2."信息隐藏", 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段; 封装机制在程序中的体现是:把描述对…

bootstrap --- 面板

基本样式 <div class"panel panel-default"><div class"panel-heading">面板头...</div><div class"panel-body">面板身体...</div><div class"panel-footer">面板脚...</div> </div>…

C#控件访问调用它的父级页面

C#控件访问调用它的父级页面 你建立一个winform程序,出来一个默认窗体Form1&#xff0c;再添加一个UserControl&#xff0c;默认名字为UserControl1;在Form1的窗口里写如下的代码: public partial class Form1 : Form { //寂义一个UserControl1对象 UserCo…

NSMapTable

跟NSDictionary用法差不多&#xff0c;不过区别是NSMapTable可以设置内存选项&#xff0c;例如可以设置key跟value的内存属性&#xff08;weak/strong&#xff09;&#xff0c;从而避免内存泄露。 例如这个 weakToWeakObjectsMapTable 方法可以获得一个key跟value都是weak的字典…

《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---23

以下为阅读《Linux命令行与shell脚本编程大全 第3版》的读书笔记&#xff0c;为了方便记录&#xff0c;特地与书的内容保持同步&#xff0c;特意做成一节一次随笔&#xff0c;特记录如下&#xff1a;转载于:https://www.cnblogs.com/guochaoxxl/p/7888810.html

bootstrap --- 弹出对话框

<button class"btn btn-primary btn-lg" data-toggle"modal" data-target"#myModal">点击触发模态对话框 </button><div class"modal fade" id"myModal" tabindex"-1" role"dialog" ari…

模意义下的FFT算法

//写在前面 单就FFT算法来说的话&#xff0c;下面只给出个人认为比较重要的推导&#xff0c;详细的介绍可参考  FFT算法学习笔记 令v[n]是长度为2N的实序列&#xff0c;V[k]表示该实序列的2N点DFT。定义两个长度为N的实序列g[n]和h[n]为 g[n]v[2n],  h[n]v[2n1],  0<n…

bootstrap --- 标签页切换

很多时候,我们希望写一个简单的标签页.以下使用bootstrap来实现… 首先导入bootstrap的依赖:jquery的依赖、bootstrap的依赖 注意: jquery的依赖要在bootstrap依赖的前面导入,原因是:bootstrap的某些功能是在jquery的基础上实现的 在 https://www.bootcdn.cn/jquery/ 导入jqu…

bootstrap --- 鼠标停留提示事件

使用bootstrap可以很简单的实现鼠标停留,提示的效果 <a href"#" data-toggle"tooltip" data-placement"right" title"Tooltip on right" class"btn btn-primary">工具提示</a> // data-toggle"tooltip&…

day 3 list列表生成式

1.定义一个list列表&#xff0c;里面元素是0-33 a []i 0 while i<33:a.append(i)i1print(a) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32] 2.range &#xff08;切片&#xff09; 1&…

2020校招前端知识点整理

自用的前端知识点整理笔记&#xff08;长期更新&#xff09; 开启面试造火箭模式&#x1f4d4;&#x1f448;点击获得更好的阅读体验 有错误的地方请指出&#xff0c;感激不尽 HTML 你是如何理解HTML语义化的&#xff1f;⭐ 总结&#xff1a;用恰当的标签来标记内容。 比如…

day18 面向对象

---恢复内容开始--- 1.1类的相关知识 声明 def functionName(args):"函数文档字符串""""函数体""" class 类名:"""类的文档字符串""""""类体""" #我们创建一个类 class…

Android studio导入support-v4.jar

support-v4.jar是support library。路径为<sdk>/extras/android/support/v4/android-support-v4.jar.转载于:https://www.cnblogs.com/Magina-learning/p/7899788.html

html5 --- 特性检测

使用Moderniz库可以对H5的特性进行检测,下载网址: https://modernizr.com // 在HTML 中的head标签中导入 <script src"/modernizr.min.js"></script>// ps:注意src的路径画布(canvas)特性检测: if (Modernizr.canvas){// 开始画... } else {// 浏览器不…

编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(3)软件开发的现状、UML扩展...

一、软件开发的现状 软件领域正在发生一个巨变&#xff0c;特别是近几年来&#xff0c;软件领域正在发生翻天覆地的变化。 这一变化主要以这个云 端大数据&#xff0c; 这些是随着目前最先进的一些技术的产生而产生的。 随着这些新的技术以及软件开发方法的不断的提升&#xf…

百度地图得到两地点(通过经纬度)的距离、 通过经纬度获取详细地址

1 /**2 * 计算两点间的距离3 * pt1 {lng:"12.34",lat:"3423"}第一个点的经纬度4 * pt2 {lng:"12.34",lat:"3423"}第二个点的经纬度5 * */6 getDistance:function(pt1,pt2){7 var map new BMap.Map(&…

html5 --- canvas绘制网格并画x、y轴

效果如下: // 代码如下: <body><canvas width"500" height"375" id"c"></canvas><script>(function draw_a() {var a_canvas document.getElementById("c");var context a_canvas.getContext("2d&qu…

系统调用软中断处理程序system_call分析

最近学习了系统调用的整个流程&#xff0c;这里总结并记录。同时作为学习孟宁老师的linux内核课程的作业。 唐建&#xff0c;《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1、概述 系统调用整个过程为&#xff1a;API——封装例程——system_c…

Poj3261 Milk Patterns

题目传送门 题意&#xff1a;对一个字符串求一个最长的子串使得它至少出现k次 额&#xff0c;因为这个题目呢&#xff0c;他的字符集非常大(100W) 所以直接用SAM是不行了&#xff0c;我们考虑用离散化SA&#xff0c;让后就可以分块rmq了 当然这样很麻烦&#xff0c;我们还是用S…

html5 --- 使用canvas画一个渐变矩形

我们希望得到如下效果: 首先准备画布 // HTML <canvas width"500" height"375" id "a"> </canvas>// JS // 获取画布的DOM元素 var a_canvas document.getElementById("1"); // 获取画布的上下文元素(之后,就可以使用…