图的遍历
关键问题:
- 选取遍历顶点:从编号最小的顶点开始
- 某个起点可能到达不了所有的其他顶点:多次调用从某顶点出发遍历图的算法
- 避免死循环:设置访问标记数组visited[n]
- 如何选取下一个要访问的顶点:<1>深度优先遍历<2>广度优先遍历
1)深度优先遍历(DFS):需要借助栈来完成
2)广度优先遍历(BFS):需要借助队列来完成
图的存储
1.邻接矩阵(数组表示法)——多用于稠密图
空间复杂度: O(n*n)
时间复杂度: O(n*n)
基本思想:
用一个一维数组存储图中顶点的信息
用一个二维数组(称为邻接矩阵)存储图中各顶点之间的邻接关系。
1)无向图的邻接矩阵
特点:主对角线为0且一定是对称矩阵
PS:
求顶点i的度:邻接矩阵的第i行(或第i列)非零元素的个数
判断顶点i和j之间是否存在边:测试邻接矩阵中相应位置的元素arc[i][j]是否为1
求顶点i的所有邻接点:将数组中第i行元素扫描一遍。若arc[i][j]为1,则顶点j为顶点i的邻接点
2)有向图的邻接矩阵
PS:
有向图的邻接矩阵不一定对称(完全图是对称的)
求顶点i的出度:邻接矩阵的第i行元素之和
求顶点i的入度:邻