五、关于图

这节课开始就是陈越姥姥的课了,开心~~
图作为一个抽象概念,在生活中有很多应用实例:
图书管理、社交网络等
一些如最短路径和最小生成树问题也给我们很大的帮助
图是一种多对多的结构,类似为线性表+树的综合
一些概念
一组顶点 V vertex的集合
一组边 E edge的集合
一条边=顶点对 (v,w)无向 有向
不考虑重边和自回路
Graph的抽象数据类型G(V,E)由非空有限顶点集合V+有限边集合E
如果带上边的权值 => 网络
操作集
创建
插入顶点
插入变
DFS
BFS
最短距离
MST最小生成树
程序实现
1.邻接矩阵
G[N][N]二维数组存储
有边=> G[i][j]=1 否则为0
最后生成一个N*N的数组
特点
①对角都是0
②对称,因为存了2次造成了浪费
我们把他化为一维数组,长度为n(n+1)/2,只存下三角矩阵的元素
原某点的位置Gij->G(i(i+2)/2+j)
网络的实现,把原来G的值由1定义为边的权重,没有边为0,但对于网络而言,这并不是好的表现方法
好处:
①直观
②方便查边
③方便查邻接点
④方便计算度(相关边的个数)
无向=非0个数
有向=非0个数 行(出度) 列(入度)
缺点:
①浪费空间 -对于稀疏图而言,边少
②浪费时间
2.邻接表
G[N]数组指针,非0元素存成链表
特点:
①一条边被存了2遍
②每个结点都是编号+指针,占位置
③带权重的话处理很麻烦
和邻接矩阵比要够稀疏的话才合算
好处:
①好找邻接点,链表遍历
②节约稀疏图空间 N个头结点+2E个结点(每个结点有2个域)
③算顶点的度
无向 好算
有向 麻烦 出度(好算) 入度(重新构造逆邻接表..麻烦)
是否方便检查任两点是否有边?NO!
3.图的其他表示方法
具体问题具体分析

图的遍历
DFS
类似先序遍历
复杂度:
邻接表O(N+E)
邻接矩阵O(NN)
BFS
类似层次遍历
邻接表O(N+E)
邻接矩阵O(N
N)

图不连通问题
几个概念
连通:
路径:
连通图:
连通分量:
这一节开始听得迷迷糊糊的,包括下面的两个例子也都听得似懂非懂,需要去看书,加深理解

两个例子
拯救007
六度空间理论

你可能感兴趣的:(五、关于图)