图描述多个点的连接关系,并且之间是有距离的
图的种类
无向图
无向图不考虑点到点的方向,只关注点与点是否有连接并且连线的长度(或称为权重)是多少。
有向图
顶点到顶点的连线是有方向的
图的存储方式
领结矩阵
无向图一般用邻接矩阵来表示,其实就是用二维数组,行列都复制一份,若1与2两点有连接并且长度是n,则a[1][2]与[2][1]这两个位置的值都为n,对角线都是0(自己不能连接自己)
归纳一下用领结矩阵,二维数组表示无向图有几个特性
- 浪费存储空间,若连线比较少,点又比较多的稀松矩阵,那么没有连线的对应数组位置都存储0
- 对角线如[1][1]、[n][n]默认存储值为0
- 因为是无向图,所以数据关于对角线相等,即A到B的距离等于B到A的距离。如果是有向图,则可定规则行是出点或是入点。
- 快速查询点与点的距离
一元数组
其实只需要获取矩阵对角线上半部分或下半部分数据即可,那么根据从上到下,从左到又的规律将数据存储到一元数组中,并根据一定规律可获取值,还可减少空间浪费
图的遍历
深度优先遍历(DFS Depth-First-Search)
从任意一个点,开始出发,访问邻接的未访问过的点,再访问该点的任意一个点,直到最深处,往回走,搜索未访问过的邻接点,直到回起点 --递归思想
广度优先遍历(BFS Breadth-First-Search)
从某一点出发,访问所有未访问的邻接点。与二叉树的层次遍历相同的思路。借助队列,将所有邻接点压入队列,出一个顶点,则将该邻点未访问的点入队列。
图常用概念
连通
无向图中,若顶点v到顶点w有路径存在,则称v和w是连通的。若图G中任意两个顶点是连通的,则图G是连通图
连通分量
无向图的极大连通子图
强连通图
有向图中 v到w与w到v两个方向之间都有路径,则两个顶点强连通。若任两个顶点强连通,则图为强连通图。
顶点度、出度、入度
顶点的往里的线,往外的线,所有线