c++ 数据结构图的实现,my write

前言

本文简单介绍了图的相关概念,介绍了图的存储、遍历相关方法,重点在于对无向图的存储、遍历、以及最小生成树相关的算法进行了编码和原理的详细解释。篇幅有限,代码仅仅实现了以邻接矩阵作为图数据的连接方式,其他方式仅仅讲述了原理。

1.01^3 * 0.99^2 = 1.0097980101 < 1.01
三天打鱼两天晒网,终将一无所获

1、什么是图?

在计算机科学中,一个图就是一些顶点的集合,这些顶点通过一系列边结对(连接)。顶点用圆圈表示,边就是这些圆圈之间的连线。顶点之间通过边连接。简言之,图是由节点以及它们之间的连线的集合,根据连线的不同又分为有向图和无向图。

在这里插入图片描述

2、为什么要使用图?

事实证明图是一种有用的数据结构。

如果你有一个编程问题可以通过顶点和边表示出来,那么你就可以将你的问题用图画出来,然后使用著名的图算法(比如广度优先搜索 或者 深度优先搜索)来找到解决方案。

例如,假设你有一系列任务需要完成,但是有的任务必须等待其他任务完成后才可以开始。你可以通过非循环有向图来建立模型:

每一个顶点代表一个任务。两个任务之间的边表示目的任务必须等到源任务完成后才可以开始。比如,在任务B和任务D都完成之前,任务C不可以开始。在任务A完成之前,任务A和D都不能开始。

现在这个问题就通过图描述清楚了,你可以使用深度优先搜索算法来执行执行拓扑排序。这样就可以将所有的任务排入最优的执行顺序,保证等待任务完成的时间最小化。

不管是什么时候遇到困难的编程问题,问一问自己:“如何用图来表述这个问题?”。图都是用于表示数据之间的关系。 诀窍在于如何定义“关系”。

3、无向图相关概念

在这里插入图片描述

4、有向图相关概念

节点在图中书面称为顶点,而顶点之间的连线,有向图中称为弧,无向图中称为边

在这里插入图片描述

而弧根据箭头指向,又有弧头和弧尾。 出度是当前顶点指出去的弧的条数,反之,入度则是指向当前顶点的弧的条数。

在这里插入图片描述
弧上的数据用权值表示。

猜你喜欢

转载自blog.csdn.net/hfut31415926/article/details/142708052