-------------------siwuxie095
图
这里介绍 图,那么什么是图呢?
图 相对于 树 来说,是一种更为复杂的数据结构
一言难以蔽之,那就直接上图吧,如下:
左边是一个图,右边也是一个图,简言之,可以把 图 暂且看成是
节点 和 它们之间的连线 的集合
根据连线的不同,又分为 有向图 和 无向图
有向图:
所谓 有向图,就是节点和节点之间,由 有向线段 或 箭头 来进行连接
如:
对于 v1 和 v4 这两个节点来说,既有从 v1 到 v4 的箭头,又有从 v4
到 v1 的箭头
如果把这种两个节点之间的双向箭头表达成一条没有箭头的线,即 既有
从 v1 到 v4 的去向线,又有从 v4 到 v1 的去向线,那就是无向图了
无向图:
所谓 无向图,就是节点和节点之间,由 无向线段 来进行连接
也可以这么理解:可以把无向图中节点和节点之间的连线,都
认为是有向图中的两条连线:一个去,一个回
图的诸多概念:
(1)有向图
有向图中的每一个节点,称之为 顶点
顶点和顶点之间的 有向线段 或 箭头,称之为 弧
弧 分为:弧尾 和 弧头,其中:
箭头的尾端(起端) 叫 弧尾,箭头的头端(终端) 叫 弧头
相对于一个顶点来说:
1)从当前顶点射出去的箭头数,叫做 出度
2)从其它顶点射回来的箭头数,叫做 入度
如:
对于 v1 顶点来说,它的出度是 2,入度是 1,因为从 v1 射出去
了 2 个箭头,从其它顶点射回来了 1 个箭头
出度 和 入度 和树中的 度 很类似
(2)无向图
无向图中的每一个节点,也称之为 顶点
顶点和顶点之间的无向线段,称之为 边
(也可以理解为 双向的弧)
一条边两端的顶点称之为 邻接点
如:
v1 和 v2、v1 和 v3、v1 和 v4 都是邻接点,因为它们都有边相连接,
而 v2 和 v4 就不是邻接点,它们之间没有边相连接
(3)连通图
对于无向图来说,如果它满足这样的条件:
无向图中的每一个顶点,都有通往其他顶点的连线,或直接、
或间接,就可以把它称之为 连通图
也可以描述为:对于任何一个顶点,都有通往其它顶点的路径
(4)完全图
对于无向图来说,如果它满足这样的条件:
无向图中的每一个顶点,都有通往其他顶点的直接的连线,
就可以把它称之为 完全图
完全图的边与顶点之间有一定的数量关系:
边数 = 顶点数 * ( 顶点数 - 1 ) / 2
(5)生成树
对于完全图来说,可以把它再进行简化,使得当前这个图中只有最小
数量的边来连接每一个顶点,就可以把它称之为 生成树
换句话说,生成树是由所有顶点,以及仅能连接这些顶点的边组成的
生成树的边与顶点之间也有一定的数量关系:
边数 = 顶点数 - 1
在以上概念中,不难发现:
对于图来说,它基本上除了 顶点,就是 边 或 弧
那么,如何通过 表达式 或 某种结构,来表示一个图呢?
显然,是有表示方法的,而且表示方法还不仅有一种,称之为
图的表示法 或 图的存储结构
在数据结构中,无论是哪一种结构,都会有节点的遍历
图,也不例外,只不过图的遍历更加复杂
因为图中的节点之间的边更多,而且,如果是有向图,只有去向
没有回向的可能也是有的
所以,图的遍历相对于队列、栈、线性表、树来说,都要更加复杂
图中最有价值的,就是 最小生成树
对于一个图来说,计算最小生成树的价值是什么呢?
如:
几个城市之间,要修高速公路,在计算这些城市之间通过高速公路
连接起来的最小的成本投入时,就要用到 最小生成树
图的应用
在如下地图中:
可以把这张地图的每一个城市都看成是一个节点,于是:
(1)路径规划
如:在出行的时候,我们都会挂导航,而导航上每次都会
通过图的方式来进行计算,从而找到一条比较近的路
(2)工程规划
如:在做 修高速公路、拉电网、拉光纤等工程时,都可以
通过图的方式来计算成本
(3)战略规划
如:在做 战争的游戏 或 军事指挥的辅助软件时,可以通过
图的方式来做战略的规划,如下:
可以把每一个城市的价值标出来,通过每个城市价值的不同,
以及需要投入兵力的不同,来计算一个最佳的攻击方法
【made by siwuxie095】