数据结构图的存储表示.pptx

上传人:李司机 文档编号:4540954 上传时间:2023-04-26 格式:PPTX 页数:28 大小:1.30MB
返回 下载 相关 举报
数据结构图的存储表示.pptx_第1页
第1页 / 共28页
数据结构图的存储表示.pptx_第2页
第2页 / 共28页
数据结构图的存储表示.pptx_第3页
第3页 / 共28页
数据结构图的存储表示.pptx_第4页
第4页 / 共28页
数据结构图的存储表示.pptx_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《数据结构图的存储表示.pptx》由会员分享,可在线阅读,更多相关《数据结构图的存储表示.pptx(28页珍藏版)》请在三一办公上搜索。

1、图,数据结构,图的概念和操作图的存储:邻接矩阵,邻接表图的遍历:宽度优先,深度优先生成树:DFS 生成树,BFS 生成树最小生成树:Prim 算法,Kruskal 算法最短路径问题:单源点最短路径和 Dijkstra 算法所有顶点之间的最短路径和 Floyd 算法AOV 网,拓扑排序AOE 网,关键路径,主要内容,*,第七章 图,*,无向图、有向图、带权图(网),2023/4/26,3,第七章 图,Graph(V,E)V=v|v 某数据对象顶点的有穷非空集合;E=(u,v)|u,v V 或 E=|x,y V是顶点之间关系的有穷集合,也叫边(或弧)集合。称u、v互为邻接点。,图的概念,2023/

2、4/26,4,第七章 图,与之相关联的边或弧的数目有向图:D(v)=ID(v)+OD(v)ID(v):入度(in-degree),即入边数;OD(v):出度(out-degree),即出边数。,顶点的度,*,第七章 图,v,ADT Graph:Graph(self)#图的创建vertex_num(self)#获取顶点总数vertices(self)#获取图的顶点集合add_vertex(self,v)#添加顶点add_edge(self,v1,v2)#添加v1到v2的边get_edge(self,v1,v2)#获取边(v1,v2)的信息,例如权out_edges(self,v)#获取从v发出的

3、所有“边”(v的所有邻接点)degree(self,v)#求v的度,图的基本操作,*,*,第七章 图,图的存储,2023/4/26,第七章 图,7,顶点集顶点信息表顶点总数关系集顶点之间关系,即边集或弧集边或弧的总数图的类型有向、无向、带权、不带权,应存储的内容,*,*,第七章 图,邻接矩阵Adjacent Matrix,2023/4/26,9,第七章 图,无向图的邻接矩阵:对称,2023/4/26,10,第七章 图,Python等长list的list:0,1,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,有向图的邻接矩阵:非对

4、称,2023/4/26,11,第七章 图,Python等长list的list:0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,有向带权图的邻接矩阵,2023/4/26,12,第七章 图,Python等长list的list:0,3,5,8,inf,0,1,4,9,inf,0,2,6,inf,inf,0,带权图的无穷大:inf=float(inf),class Graph:def _init_(self,mat):vnum=len(mat)#对传入的mat做了拷贝构造 self._mat=mati:for i in range(vnum)self

5、._vnum=vnum,图的建立邻接矩阵,2023/4/26,13,第七章 图,获取顶点v的所有“邻接点”,2023/4/26,14,g1.out_edges(1)=(0,1),(4,1),(5,1),g3.out_edges(2)=(0,9),(3,2),def out_edges(self,v):获取v的所有(邻接点,边权)对,以list形式返回 assert 0=v self._vnum#用assert替代异常 return Graph._out_edges(self._mat,v)staticmethod def _out_edges(mat,v):edges=row=matv for

6、 i in range(len(row):if rowi!=0 and rowi!=inf:edges.append(i,rowi)#(邻接点,边权)return edges,获取顶点v的所有“邻接点”(邻接边、出边),2023/4/26,15,第七章 图,邻接表 Adjacent List(邻接矩阵的压缩),2023/4/26,16,第七章 图,无向图的邻接表,2023/4/26,17,第七章 图,g1.out_edges(1)=(0,1),(4,1),(5,1),Python中list的list:(1,1),(4,1),(0,1),(4,1),(3,1),(5,1),(2,1),(5,1)

7、,(0,1),(1,1),(1,1),(2,1),(3,1),有向图的邻接表,2023/4/26,18,第七章 图,g2.out_edges(3)=(0,1),(1,1),Python中list的list:(1,1),(4,1),(2,1),(3,1),(0,1),(1,1)(2,1),有向图的逆邻接表,2023/4/26,19,第七章 图,方便找到入边!,有向带权图的邻接表,2023/4/26,20,第七章 图,g3.out_edges(2)=(0,9),(3,2),Python中list的list:(1,3),(2,5),(3,8),(2,1),(0,4),(0,9),(3,2),(0,6

8、),#课本采用了继承方式,逻辑上不是太好!class GraphA(Graph):def _init_(self,mat):#mat是等长list的list vnum=len(mat)#所有顶点的(邻接点,边权)对的list self._mat=Graph._out_edges(mat,i)for i in range(vnum)self._vnum=vnum,图的建立邻接表,2023/4/26,第七章 图,21,def out_edges(self,v):获取v的所有(邻接点,边权)对,以list形式返回 assert 0=v self._vnum return self._matv,获取顶

9、点v的所有“邻接点”(邻接边、出边),2023/4/26,第七章 图,22,课本中对无权、有权图统一处理了,具体应用中可针对图的类型做专门的定义,使得无权图的邻接点集是单纯的点集,不是(u,1)形式的边对。通常对图的表示和操作,直接使用list的list型的对象即可,不需要封装成专门Graph类型。,说明,2023/4/26,第七章 图,23,由文件中读入图信息UCSD_Algorithms on Graph,2023/4/26,第七章 图,24,2023/4/26,第七章 图,25,input=sys.stdin.read()data=list(map(int,input.split()n,

10、m=data0:2 data=data2:edges=list(zip(data0:(2*m):2,data1:(2*m):2)adj=for _ in range(n)for(a,b)in edges:adja-1.append(b-1)adjb-1.append(a-1)#有向图去除此句!,无权图的读入,*,第七章 图,*,input=sys.stdin.read()data=list(map(int,input.split()n,m=data0:2 data=data2:edges=list(zip(zip(data0:(3*m):3,data1:(3*m):3),data2:(3*m)

11、:3)data=data3*m:adj=for _ in range(n)cost=for _ in range(n)for(a,b),w)in edges:adja-1.append(b-1)costa-1.append(w),有向带权图的读入,2023/4/26,第七章 图,27,import sys#导入sys模块input=sys.stdin.read()这里要在 console窗口 中,转到文件所在的目录,执行命令:python*.py graph.txt其中:*.py 是包含代码段的文件 graph.txt是图信息文件,和*.py在同一目录下也可以:python*.py然后手工输入图信息,以Ctrl+Z结束输入。,将标准输入stdin重定向到文件,2023/4/26,第七章 图,28,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号