图的基本知识

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,一经查实,立即删除!

相关文章

bootstrap --- 面板

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

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;用恰当的标签来标记内容。 比如…

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

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

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

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…

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

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

vue --- 使用vue在html上显示当前时间

希望如下效果(时间按秒钟更新) 导入Vue依赖的CDN <script src"https://unpkg.com/vue/dist/vue.min.js"> </script>创建视图 <div id"app">{{date}}</div>Model <script>var app new Vue({el: "app",data: …

vue --- 购物车页面

下面我看开始自己写一个购物车的页面. 我们希望得到如下的效果: 说明: 购买数量最小为0购买数量变化时,对应的总价随之变化点击移除操作对应的商品会移除掉,总价随之改变每个商品作为一个list表的一个对象每个对象,包含id、name、price、count等属性 index.html (整体代码最…

vue --- 从模块从父元素获取数据

vue的精彩之处在于其组件的可复用性.下面谈谈组件(component)如何从父元素获取数据 模块引用 首先说说,如何引用模块 <div id"app"><my-component ></my-component> </div> <script src“unpkg.com/vue/dist/vue.min.js”> </…

前端知识总结(一)

1、用原生JS实现forEach if(!Array.prototype.forEach) {Array.prototype.forEach function(fn, context) {var context arguments[1];if(typeof fn ! "function") {throw new TypeError(fn "is not a function");}for(var i 0; i < this.length; …

vue --- 模块从子组件获取数据

先看个一般的例子: // 我们需要将信息从子组件传递给父组件,(有可能不止一条信息,因此)肯定需要一个标识,这个标识放在$emit里面(js),在dom中通过来关联父元素。如下:<div id "app"><transfer connect"sayConnect" build"sayBuild"&g…

mySql配置在nodejs中使用

mySql安装完成后&#xff0c;配置链接nodejs项目中的数据库。 1、测试是否安装成功。 2、use nodejs使用nodejs 3、设置数据源 5、exit 转载于:https://www.cnblogs.com/zhxzh/p/9244996.html

前端知识总结(二)

33、闭包 闭包的概念 上一节代码中的f2函数&#xff0c;就是闭包。 各种专业文献上的"闭包"&#xff08;closure&#xff09;定义非常抽象&#xff0c;很难看懂。我的理解是&#xff0c;闭包就是能够读取其他函数内部变量的函数。 由于在Javascript语言中&#x…

前端知识总结(三)

51、启动GNU加速 硬件加速的工作原理 浏览器接收到一个页面之后&#xff0c;将html解析成DOM树&#xff0c;浏览器解析渲染「html」的过程 按着一定的规则执行&#xff0c;DOM树和CSS树结合后构成浏览器形成页面的 渲染树 ; 渲染树中包含大量的渲染元素&#xff0c;每一个元素…