算法与数据结构(十)--图的入门

这篇具有很好参考价值的文章主要介绍了算法与数据结构(十)--图的入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.图的定义和分类

1.通俗定义

图是由一组顶点和一组能够将两个顶点连接的边组成的。
算法与数据结构(十)--图的入门,数据结构

2.图的分类

按照连接两个顶点的边的不同,可以把图分为以下两种:
无向图:边仅仅连接两个顶点,没有其他含义;
算法与数据结构(十)--图的入门,数据结构
有向图:边不仅连接两个顶点,并且具有方向;
算法与数据结构(十)--图的入门,数据结构

另外图还可以分为赋权图和非赋权图,一个是每条边都带有权值,一个是每条边都没有权值。
通常权值是具有某种实际意义的数,比如2个顶点之间的距离,耗费等。

算法与数据结构(十)--图的入门,数据结构

综上图可以大致分为无向图,有向图,赋权无向图,赋权有向图四种。

注:一般情况下,图中两个顶点只有一条边连接。

3.数学定义

算法与数据结构(十)--图的入门,数据结构

4.图的相关概念

相邻顶点
当两个顶点通过一条边相连时,我们称这两个顶点是相邻的,并且称这个边依赖于这两个顶点。
度 出度 入度
某个顶点的度就是依附于该顶点的边的个数。

算法与数据结构(十)--图的入门,数据结构
子图
是一幅图的所有边的子集(包含这些边依附的顶点)组成的图。
路径
是由边顺序连接的一系列的顶点组成。

是一条至少含有一条边且终点和起点相同的路径。
算法与数据结构(十)--图的入门,数据结构
连通图
如果图中任一一个顶点都存在一条路径到达另外一个顶点,那么这幅图就称之为联通图。
连通子图
一个非联通图由若干连通的部分组成,每一个连通的部分都可以成为该图的连通子图。
连通分量:
连通子图的数量

 算法与数据结构(十)--图的入门,数据结构

完全图/简单完全图:
假设一个图有n个顶点,那么如果任意两个顶点之间都有边的话,该图就称为完全图。
n个端点的完全无向图有n(n−1)/2条边,而完全有向图有n(n-1)条边。【相当于之前每两个点之间只有一条边,现在有一来一去两条边】

二.图的存储结构

要表示一幅图,只需要表示清楚一下两部分内容即可:
1.图中所有的顶点;
2.所有连接顶点的边;
一般的话我们只需要清楚点的个数,然后存储好边的信息就够了。
常见图(更准确的说是边)的存储结构有两种:邻接矩阵和邻接表

【1】邻接矩阵

1.使用一个V*V的二维数组int[V][V]  adj。
2.无向图如果顶点v和顶点w相连,我们只需要把adj[v][w]和adj[w][v]的值设置为1,否则设置为0即可。

算法与数据结构(十)--图的入门,数据结构
有向图v->w,把adj[v][w]的值设置为1,w->v,把adj[w][v]的值设置为1。

算法与数据结构(十)--图的入门,数据结构

3.如果是赋权图的话直接将值换为对应的权值即可。

算法与数据结构(十)--图的入门,数据结构

很明显,邻接矩阵这种存储方式的空间复杂度是V^2的,如果我们处理的问题规模比较大的话,内存空间极有可能不够用。

【2】邻接表

1.使用一个大小为V的数组Queue[V]  adj,把索引看做是顶点;
2.无向图每个索引处adj[v]存储了一个链表,该链表中存储的是所有与该顶点相邻的其他顶点

算法与数据结构(十)--图的入门,数据结构

有向图的话一般使用的是逆转链表,简单说就是每个结点存储以这个点为终点的单链表。

算法与数据结构(十)--图的入门,数据结构

上图表示的意思是1连接4,3,2;而2连接1,5;而3连接1,5;而4连接1,5;而5连接4,3,2。

很明显,邻接表的空间并不是是线性级别的,所以后面我们一直采用邻接表这种存储形式来表示图。

三.图的搜索

1.深度优先搜索

所谓的深度优先搜索,指的是在搜索时,如果遇到一个结点既有子结点,又有兄弟结点,那么先找子结点,然后找兄弟结点。

一般是先序遍历,即根结点 ---> 左子树 ---> 右子树。

复杂度:用邻接矩阵实现复杂度为O(n的平方),用邻接表实现的时间复杂度为O(n+e)【n是点的个数,e是边的个数】

例:

算法与数据结构(十)--图的入门,数据结构

2.广度优先搜索

所谓的广度优先搜索,指的是在搜索时,如果遇到一个结点既有子结点,又有兄弟结点,那么先找兄弟结点,然后找子结点。

需要注意的是,图的广度优先搜索和树一样,如果找完兄弟节点后,要返回刚开始的结点,去寻找其子结点。

复杂度:用邻接矩阵实现复杂度为O(n的平方),用邻接表实现的时间复杂度为O(n+e)【n是点的个数,e是边的个数】


例:下面这道题选择D

算法与数据结构(十)--图的入门,数据结构文章来源地址https://www.toymoban.com/news/detail-670515.html

到了这里,关于算法与数据结构(十)--图的入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构与算法】图的深度优先和广度优先遍历

    😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享Java相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页 ✨✨座右铭✨✨ : 坚持到底,决不放弃,是成功的保证,只要你不放弃,你就有机会,只要放弃的人,他肯定是不会成功的人。 图是一

    2024年02月02日
    浏览(57)
  • 数据结构入门(C语言版)图的概念和功能函数实现

    图是一种比线性表和树更复杂的数据结构。在线性表中,数据元素之间仅有 线性关系每个元素 只有 一个直接前驱 和 一个直接后继 。在树形结构中,数据元素之间存在明显的层次关系,并且每层的元素可能和下一层的多个元素(即其孩子结点)相邻,但只能和上一层的个元素(即其

    2024年02月06日
    浏览(48)
  • 【数据结构与算法】图的搜索——广度优先遍历、最小生成树

    邻接链表: 用字典实现.有向图的邻接链表的总长度等于图的边个数;无向图的邻接链表的总长度等于图的边个数的2倍. 邻接矩阵:用于最短路径算法. 该数据结构维护一个不相交动态集的集合,每个集合有一个代表,不关心谁做代表。 支持三种操作: MAKE_SET(x) FIND_SET(x) UNION(x,y

    2024年02月19日
    浏览(49)
  • 学习高级数据结构:探索平衡树与图的高级算法

    🎉欢迎来到数据结构学习专栏~学习高级数据结构:探索平衡树与图的高级算法 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:数据结构学习 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技

    2024年02月09日
    浏览(44)
  • 算法数据结构——图的遍历之深度优先搜索算法(Depth First Search)

    深度优先搜索算法 (Depth First Search):英文缩写为 DFS。是一种用于搜索树或图的算法。所谓深度优先,就是说每次都尝试向更深的节点走。 深度优先搜索采用了回溯思想,该算法沿着树的深度遍历树的节点,会尽可能深的搜索树的分支。当节点 v 的所在边都己被探寻过,搜

    2024年02月09日
    浏览(48)
  • 【数据结构】无向图的最小生成树(Prime,Kruskal算法)

    连通图 :在 无向图 中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中 任意一对顶点都是连通的 ,则称此图为连通图 强连通图 :在 有向图 中,若在每一对顶点vi和vj之间都存在一条从vi到vj的路径,也存在一条从vj到vi的路径,则称此图是强连通图 生成

    2024年01月24日
    浏览(46)
  • C语言数据结构——图的最短路径算法解决实例问题

    一、问题描述 W公司在某个地区有6个产品销售点,现根据业务需要打算在其中某个销售点上建立一个中心仓库,负责向其他销售点提供产品。由于运输线路不同,运输费用也不同。假定每天需要向每个销售点运输一次产品,那么应将中心仓库建在哪个销售点上,才能使运输费

    2024年02月08日
    浏览(44)
  • 数据结构学习笔记——图的遍历算法(深度优先搜索和广度优先搜索)

    图的遍历指从图中某一顶点出发(任意一个顶点都可以作为访问的起始顶点),按照某种遍历方法,对图中所有的顶点访问一次且只访问一次。图与树不一样,其中一个顶点可能与多个顶点相连,所以需记录已访问过的顶点,当访问一个顶点后,考虑如何选取下一个要访问的

    2024年02月05日
    浏览(49)
  • 数据结构(12)Dijkstra算法JAVA版:图的最短路径问题

    目录 12.1.概述 12.1.1.无权图的最短路径  12.1.2.带权图的最短路径 1.单源最短路径 2.多源最短路径 12.2.代码实现 无权图的最短路径,即最少步数,使用BFS+贪心算法来求解最短路径,比较好实现,此处不做展开讨论。 有权图的最短路径,不考虑权重为负数的情况,因为权重为负

    2024年02月06日
    浏览(44)
  • 【数据结构与算法】图的基本概念 | 邻接矩阵和邻接表 | 广度优先遍历和深度优先遍历

    🌠 作者:@ 阿亮joy. 🎆 专栏:《数据结构与算法要啸着学》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 图是由顶点集合及顶点间的关系组成的一种数据结构:G = (V, E) ,其中: 顶点集合V = {x|x属于某

    2024年02月04日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包