第6章图 本章中介绍下列主要内容: 图的定义 图的存储结构 ●图的遍历操作 ●图的几个典型问题 西加大学数学与信息学院
ぜ6【 భ ᴀゴЁҟ㒡ϟ߫Џ㽕ݙᆍ˖ l ⱘᅮН l ⱘᄬټ㒧ᵘ l ⱘ䘡ग़᪡ l ⱘϾൟ䯂乬 ߎ䗔
61图的定义 62图的存储结构 6.3图的遍历 64最小生成树问题 6.5拓扑排序问题 西加大学数学与信息学院
6.1 ⱘᅮН 6.2 ⱘᄬټ㒧ᵘ 6.3 ⱘ䘡ग़ 6.4 ᳔ᇣ⫳៤ᷥ䯂乬 6.5 ᢧᠥᥦᑣ䯂乬
6l图的定义 6.1.1定义 图是由结点的有穷集合V和边的集合E组成。其 中,为了与树形结构加以区别,在图结构中常常将结 点称为顶点,边是顶点的有序偶对,若两个顶点之间 存在一条边,就表示这两个顶点具有相邻关系。 西加大学数学与信息学院
6.1 ⱘᅮН 6.1.1 ᅮН ᰃ⬅㒧⚍ⱘ᳝か䲚ড়V䖍ⱘ䲚ড়E㒘៤DŽ݊ ЁˈЎњϢᷥᔶ㒧ᵘࡴҹऎ߿ˈ㒧ᵘЁᐌᐌᇚ㒧 ⚍⿄Ў乊⚍ˈ䖍ᰃ乊⚍ⱘ᳝ᑣيᇍˈ㢹ϸϾ乊⚍П䯈 ᄬϔᴵ䖍ˈህ㸼⼎䖭ϸϾ乊⚍᳝Ⳍ䚏݇㋏DŽ
图6-1 西加大学数学与信息学院 网囧
6-1 (a) (b)
在上面两个图结构中,一个是有向图,即每条 边都有方向,另一个是无向图,即每条边都没有方 向 在有向图中,通常将边称作弧,含箭头的一端 称为弧头,另一端称为弧尾,记作两条弧。若无向图中有n个顶点,则 最多有m(n-)/2条边,我们又将具有n(n-)/2条边的 无向图称作无向完全图 西加大数学与信启学览 网囧
Ϟ䴶ϸϾ㒧ᵘЁˈϔϾᰃ᳝ˈे↣ᴵ 䖍䛑᳝ᮍˈϔϾᰃ᮴ˈे↣ᴵ䖍䛑≵᳝ᮍ DŽ ᳝Ёˈ䗮ᐌᇚ䖍⿄ᓻˈㆁ༈ⱘϔッ ⿄Ўᓻ༈ˈϔッ⿄Ўᓻሒˈ䆄ˈᅗ㸼⼎ Ң乊⚍viࠄ乊⚍vj᳝ϔᴵ䖍DŽ 㢹᳝Ё᳝nϾ乊⚍ˈ᳔᳝߭n(n-1)ᴵᓻˈ ៥Ӏজᇚ᳝n(n-1)ᴵᓻⱘ᳝⿄᳝ᅠܼ DŽ ҹ乊⚍vЎᓻሒⱘᓻⱘ᭄Ⳃ⿄乊⚍vⱘߎᑺˈ ҹ乊⚍vЎᓻ༈ⱘᓻⱘ᭄Ⳃ⿄乊⚍vⱘܹᑺDŽ ᮴Ёˈ䖍䆄(vi ,vj )ˈᅗ㭈⎉ⴔᄬϸᴵᓻDŽ㢹᮴Ё᳝nϾ乊⚍ˈ߭ ᳔᳝n(n-1)/2ᴵ䖍ˈ៥Ӏজᇚ᳝n(n-1)/2ᴵ䖍ⱘ ᮴⿄᮴ᅠܼDŽ
与顶点v相关的边的条数称作顶点v的度。 路径长度是指路径上边或弧的数目。 若第一个顶点和最后一个顶点相同,则这条路 径是一条回路。 若路径中顶点没有重复出现,则称这条路径为 简单路径。 在无向图中,如果从顶点v到顶点v有路径, 则称v和v连通。如果图中任意两个顶点之间都连通, 则称该图为连通图,否则,将其中的极大连通子图称 为连通分量。 在有向图中,如果对于每一对顶点v和v;,从v 到v和从v到v都有路径,则称该图为强连通图;否 则,将其中的极大连通子图称为强连通分量。 西加大学数学与信息学院 网囧
Ϣ乊⚍vⳌ݇ⱘ䖍ⱘᴵ᭄⿄乊⚍vⱘᑺDŽ 䏃ᕘ䭓ᑺᰃᣛ䏃ᕘϞ䖍ᓻⱘ᭄ⳂDŽ 㢹ϔϾ乊⚍᳔ৢϔϾ乊⚍Ⳍৠˈ߭䖭ᴵ䏃 ᕘᰃϔᴵಲ䏃DŽ 㢹䏃ᕘЁ乊⚍≵᳝䞡ߎ鹵߭ˈ⦃䖭ᴵ䏃ᕘЎ ㅔऩ䏃ᕘDŽ ᮴ЁˈབᵰҢ乊⚍viࠄ乊⚍vj᳝䏃ᕘˈ ߭⿄vivj䖲䗮DŽབᵰЁӏᛣϸϾ乊⚍П䯈䛑䖲䗮ˈ ߭⿄䆹Ў䖲䗮ˈ৺߭ˈᇚ݊Ёⱘᵕ䖲䗮ᄤ⿄ Ў䖲䗮ߚ䞣DŽ ᳝ЁˈབᵰᇍѢ↣ϔᇍ乊⚍vivjˈҢvi ࠄvjҢvjࠄvi䛑᳝䏃ᕘˈ߭⿄䆹Ўᔎ䖲䗮˗৺ ߭ˈᇚ݊Ёⱘᵕ䖲䗮ᄤ⿄Ўᔎ䖲䗮ߚ䞣DŽ
6.1.2图的基本操作 基本操作: 1)创建一个图结构 Create Graph(G) (2)检索给定顶点 Locate vex(G,item) (3)获取图中某个顶点 Getvex(G,y) (4)为图中顶点赋值 Putvex(G,y,lue) 5)返回第一个邻接点 FirstAdjvex(G,y) (6)返回下一个邻接点 NextAdjVex(G,v,w) (7)插入一个顶点 InsertVex(G,y) (8)删除一个顶点 Deletevex(G,y) 9)插入一条边 Inserted(G,y,w) 10)删除一条边 Deleteedge(Gv,w) (11)遍历图 Traverse(G,y) 西加大学数学与信息学院 网囧
6.1.2 ⱘᴀ᪡ ᴀ᪡˖ ˄1˅߯ᓎϔϾ㒧ᵘ CreateGraph(G) ˄2˅Ẕ㋶㒭ᅮ乊⚍ LocateVex(G,item) ˄3˅㦋পЁᶤϾ乊⚍ GetVex(G,v) ˄4˅ЎЁ乊⚍䌟ؐ PutVex(G,v,value) ˄5˅䖨ಲϔϾ䚏⚍ FirstAdjVex(G,v) ˄6˅䖨ಲϟϔϾ䚏⚍ NextAdjVex(G,v,w) ˄7˅ᦦܹϔϾ乊⚍ InsertVex(G,v) ˄8˅ߴ䰸ϔϾ乊⚍ DeleteVex(G,v) ˄9˅ᦦܹϔᴵ䖍 InsertEdge(G,v,w) ˄10˅ߴ䰸ϔᴵ䖍 DeleteEdge(G,v,w) ˄11˅䘡ग़ Traverse(G,v)
6.2图的存储结构 6.2.1邻接矩阵 1.有向图的邻接矩阵 具有n个顶点的有向图可以用一个nXn的方形矩阵 表示。假设该矩阵的名称为M,则当~>是该有向图 中的一条弧时,Mi=1;否则Mj=0。第个顶点的 出度为矩阵中第i行中“1”的个数;入度为第i冽中“1”的 个数,并且有向图弧的条数等于矩阵中“1”的个数。 西加大学数学与信息学院 网囧
6.2 ⱘᄬټ㒧ᵘ 6.2.1 䚏ⶽ䰉 1. ᳝ⱘ䚏ⶽ䰉 ᳝nϾ乊⚍ⱘ᳝ৃҹ⫼ϔϾn´nⱘᮍᔶⶽ䰉 㸼⼎DŽ؛䆒䆹ⶽ䰉ⱘৡ⿄ЎMˈ߭ᔧᰃ䆹᳝ ЁⱘϔᴵᓻᯊˈM[i,j]=1˗৺߭M[i,j]=0DŽiϾ乊⚍ⱘ ߎᑺЎⶽ䰉Ёi㸠Ё³´ⱘϾ᭄˗ܹᑺЎi߫Ё³´ⱘ Ͼ᭄ˈᑊϨ᳝ᓻⱘᴵ᭄ㄝѢⶽ䰉Ё³´ⱘϾ᭄DŽ
1.2无向图的邻接矩阵 具有n个顶点的无向图也可以用一个nxn的方形矩 阵表示。假设该矩阵的名称为M,则当(vy)是该无 向图中的一条边时,M[=Mij=1;否则, M[ij=Mⅰ}=0。第个顶点的度为矩阵中第i行中“1 的个数或第i中“1”的个数。图中边的数目等于矩阵 中“1”的个数的一半,这是因为每条边在矩阵中描述了 两次。 西加大学数学与信息学院 网囧
ˊ2 ᮴ⱘ䚏ⶽ䰉 ᳝nϾ乊⚍ⱘ᮴гৃҹ⫼ϔϾn´nⱘᮍᔶⶽ 䰉㸼⼎DŽ؛䆒䆹ⶽ䰉ⱘৡ⿄ЎMˈ߭ᔧ˄vi ,vj˅ᰃ䆹᮴ Ёⱘϔᴵ䖍ᯊˈM[i,j]=M[j,i]=1˗৺߭ˈ M[i,j]=M[j,j]=0DŽiϾ乊⚍ⱘᑺЎⶽ䰉Ёi 㸠Ё³´ ⱘϾ᭄i߫Ё³´ⱘϾ᭄DŽЁ䖍ⱘ᭄ⳂㄝѢⶽ䰉 Ё³´ⱘϾ᭄ⱘϔञˈ䖭ᰃЎ↣ᴵ䖍ⶽ䰉Ёᦣ䗄њ ϸDŽ
01000 M=00010 10000 00100 图6-4 西加大学数学与信息学院 网囧
6-4