7.1图的基本概念7.2图的存储结构7.3图的遍历7.4最小生成树7.5一点到其他点最短路径问题7.6拓扑排序7.7关键路径第七章图7.1图的基本概念�图定义图是由顶点集合(vertex)及顶点间的关系集合组成的一种数据结构:Graph=(V,E)其中V={x|x∈某个数据对象}是顶点的有穷非空集合;E={(x,y)|x,y∈V}或E={|x,y∈V&&Path(x,y)}�有向图与无向图是有序的。边就称为弧,x为弧尾,y为弧头。(x,y)是无序的。�完全图�若有n个顶点的无向图有n(n-1)/2条边,则此图为完全无向图。�有n个顶点的有向图有n(n-1)条边,则此图为完全有向图。00001111222265433�邻接顶点如果(u,v)是E(G)中的一条边,则称u与v互为邻接顶点。�子图设有两个图G=(V,E)和G‘=(V’,E‘)。若V’⊆V且E‘⊆E,则称图G’是图G的子图。�权某些图的边具有与它相关的数,称之为权。这种带权图叫做网络。�稠密图和稀疏图若边或弧的个数e<1AEjiEjijiEdge0123⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=0101101001011010A.edge012⎥⎥⎦⎤⎢⎢⎣⎡=000101010A.edge�邻接矩阵的特征:�无向图的邻接矩阵是对称的;�有向图的邻接矩阵可能是不对称的。�在有向图中,统计第i行1的个数可得顶点i的出度,统计第j行1的个数可得顶点j的入度。�在无向图中,统计第i行(列)1的个数可得顶点i的度。863129542031⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡∞∞∞∞=068053290410A.edge网络(带权图)的邻接矩阵⎪⎩⎪⎨⎧==∉>∉<≠∞∈>∈<≠=jiji,ji,jiji,ji,jijiji若或且若或且若,)(,)(),,(]][[0EEEEWA.edge二、邻接表�1.无向图的邻接表•将与同一顶点相邻接的顶点链接成一个单链表.ABCDdataheadABCD0123VexnextVexnext∧∧∧∧130210邻接表存储结构的描述structLinkNode{intvex;//保存该结点在数组中的下标LinkNode*next;//保存下一个邻接结点的地址};structNode{DataTypedata;//保存结点的数据LinkNode*head;//保存邻接结点链表的链头指针}Adj[MaxSize];//MaxSize为图的总结点个数邻接表存储结构的实现算法•在输入数据前,顶点表Adj[]全部初始化,即将第i个结点的数据存入Adj[i].data中;•接着,把所有第i个结点的邻接点链接成一个单链表,方法是:在输入数据时,每输入一条边,就需要建立一个边结点,并将它链入相应边链表中。LinkNodeLinkNode*p=newLinkNode;p->vex=k;//建立边结点,vex域赋为kp->next=Adj[i].head;Adj[i].head=p;//头插入建链�2.有向图的邻接表和逆邻接表ABCdataheadABC012Vexnext∧邻接表(出边表)dataheadABC012Vexnext逆邻接表(入边表)102∧∧∧∧∧011�3.网络(带权图)的邻接表BBAACCDD69528dataheadABCD0123Vexweightnext∧∧∧∧1536283219((出边表出边表))((顶点表顶点表))�邻接表的特征:�在邻接表的边链表中,各个边结点的链入顺序任意,视边结点输入次序而定。�求某个顶点的度(入度或出度)比较方便;�设图中有n个顶点,e条边,则用邻接表表示无向图时,需要n个顶点结点...