图算法

百度一查,上来就是什么各种搜索,晕。。

首先不是应该说说图 是什么吗? 难道是我们平时说的图片?显然不是,图指的是 好多点以及他们之间的连线(图中定义是 边),这些点和线组合起来我们称之为图。 

知道了什么是图,那么这个图能做什么用呢?我首先想到的就是地图了: 每个路口就是点,路口到另一个路口的路就是线了。还有就是我们的网络了,路由器就是点,网线就是线。

然后是算法: 地图我想到的是如何走最短的路到达另一个路口, 网络就是如何最短或则最快访问到我要访问的服务器。。

如何把具体的路口和路 描述为电脑语言?

第一步: 如何表示地图 

第二步: 如何找到最短路径或者最快访问。

图的表示:邻接链表(边比较少的稀疏图), 邻接矩阵(边数量接近点个数平方的稠密图 )

1. 邻接链表: 就是把一个节点相连的节点用 链表存储起来(可以理解为这些节点具有相同的hashcode),  所有节点 对应的 链表 存储到数组中, 这种图的表示方法即为邻接链表。存储空间最大 2E(E表示边数,V表示点数)

b 就是图a 的 邻接链表

 2. 邻接矩阵: 类似于多维数组,维度由点数决定, 数组内的值用 0和1 表示,1表示有线连接。 占用空间为固定 V的2次方(V是点数),所以当点数较少时,建议使用该种图表示法。

二、 图的搜索算法

 算法有: 广度搜索算法  , 深度搜索算法

1. 广度搜索算法: 就是按层进行搜索, 起点为A ,搜索a 的所有直接子节点,然后搜索这些子节点的直接 子节点,依次进行,直到所有节点都被搜索到。

 参照 https://www.cnblogs.com/skywang12345/p/3711483.html

2. 深度优先搜索: 以一个顶点A为起点,访问它的其中一个子节点,然后访问该子节点的子节点,依次访问到最后一个子节点。然后回到最后字节点的上个节点,看它有没有其他节点,如果有,

 按照上述步骤依次走完所有节点,直到A 的所有子节点(包含子子节点)都被访问。 如果图中还有没有被访问的点,选取一个,继续上述步骤,直至图中所有节点被访问。

参照 https://www.cnblogs.com/skywang12345/p/3711483.html

  

原文地址:https://www.cnblogs.com/zhangchenglzhao/p/10113088.html