定义
- 加上数字(权重)就成了网络。
图的表示
邻接矩阵
- 对角线必须全部是0,因为我们不允许自回路
- 对称矩阵。0到3有边,3到0也有边。但是这样就浪费了一半的空间。
对于有向图来说,有入度和出度。
邻接矩阵的缺点:浪费空间,如果顶点很多边很少的话;浪费时间,在统计边的时候,如果很多都是没边的话。
- 完全图:任意两个顶点间都有边,边数达到极大。
邻接表
- 定义一个长度为顶点数的数组,存放指向一个链表的头指针,这个头指针指向的链表存放着所有和顶点相连的顶点。
- 其实也并不节省空间,因为边同样是被存了两次,链表中每个结点都要有数据域和指针域,如果这个图是网络的话还要加上权重,所以一定要够稀疏才合算。
深度优先搜索
- 利用堆栈来做。
- 其实就是把每一条路都走一遍,走进死胡同则结束递归进入最近一个分叉路口的下一个循环,即另一条岔路。
- 可以把深度优先搜索想象成是一组发散的线。
- 算法实例:第六讲->6.2第1小节
广度优先搜索
- 利用队列来做。
- 其实就是把结点的所有邻接点都入队,然后往这边岔路走几步,往那边岔路也走几步。就像长了分身一样,这条岔路前进一点,那条岔路也前进一点,一圈一圈的往外走,只要出口被包围到圈子里就结束循环。
- 可以把广度优先搜索想象成是辐射圈。
- 算法实例:第七讲->6.2第3小节
两种遍历的比较
- 算法实例:第七讲->6.2第5小节
图的连通
- 不简单的路径就是指路径上有环,有环则称为回路。
- 所有连通的顶点都包含在里面
- 连通分量指的是无向图
- 是双向路径而不是双向边。
- 弱连通:不是强连通,但是抹掉方向以后是连通的。
- D自己是一个单独的强连通分量。
- 第二个算法就是用来找所有的连通分量的