If you can't read please download the document
Upload
idana
View
31
Download
2
Embed Size (px)
DESCRIPTION
第七章 图. 学习要点 1 .熟悉图的各种存储结构及其构造算法,了解实际问题的求解效率与采用何种存储结构和算法有密切联系; 2 .熟练掌握图的两种遍历:深度优先遍历和广度优先遍历的算法。在学习中应注意图的遍历算法与树的遍历算法之间的类似和差异。树的先根遍历是一种深度优先搜索策略,树的层次遍历是一种广度优先搜索策略 3 .理解各种图的算法;. 第七章 图 7 .1 图的基本概念 7 .2 图的存储结构 7 .3 图的遍历 7 .4 生成树 7 .5 拓扑排序 7 .6 关键路径 - PowerPoint PPT Presentation
Citation preview
1 2 3
7.1 GG= VEG1=V={v0 ,v1,v2,v3,v4 }E={(v0,v1),(v0,v3),(v1,v2),(v1,v4),(v2,v3)(v2,v4)}G1(vi,vj)vivj
G2 vivjvivjGGGGGGG2=V={v0 v1,v2,v3}E={ , , ,}
1 2 3 4
1 ,vu e= (v, u), vu e 2 V = V V=V V=V V = V+V Gne = 2*e 2 e
n(n-1)n~ n(n-1)/2 n~ ~ ~
5 , G1V0,V1,V2,V3 G2 V0,V2,V3,V0G1G2
6 G=< V, E > vu v u G
7 G=VEG1=V1E1V1 VE1 E G1G (b)(c) (a) (a)(b)(c)
8 G G G G
D D DD
G1G1T1G1n-19
G1V(G1)={1,2,3,4,5,6} E(G1)={, , , , , , }G2V(G2)={1,2,3,4,5,6,7} E(G1)={(1,2), (1,3), (2,3), (2,4),(2,5), (5,6), (5,7)}
341310
123563 1235631 3563125765237 12576521512356125761231
7.2
G=(V,E)n1GAn
nn(n+1)/2nnViTD(Vi)Ai(i)ViAiViAi A0 00
#define n 6 /**/#define e 8 /**/typedef char vextype; /**/typedef float adjtype; /**/typedef struct{ vextype vexs[n]; adjtype arcs[n][n];} graph;
21435
BADCE
21534000000000000000000000000=807080705040503040203020arcs6203050407080
CREATEGRAPH(graph *ga){ int i,j,k; float w; for (i=0;ivexs[i]getchar(); /**/ for (i=0;iarcs[j][i]w; }}
iVi
Vi Vj,2Vj
^^^^
ViiViiViiv,uvuGm(mn), eGm+2*eGG
Vi
^^^^^^^^
^^^^^
7.3 1)v 2)vv3)
v 1v 2v 1 V0,V1,V3,V7,V4,V2,V5,V6,
1GV0 2 V0,V1,V4,V7,V3,V2,V5,V6
V1V3 V7 V6 V2 V5 V8 V4
V1V3 V7 V6 V2 V4 V8 V5
n e v w 2e O(e)1O(n+e)O(n)O(n2)
V1 V2 V4 V8 V5 V6 V3 V7V1 V2 V4 V8 V5 V6 V3 V7
V1 V2 V4 V8 V3 V6 V7 V5
1)v 2)V034)
vi1vi 2 vi w1 ,w2 , wk 3; 1
G V0 V0,V1,V2,V3,V4,V5,V6,V7
V0V1V2V3V4V5V6V7V1V2V3V0V4V5V6V7 3(2Q1v 2vw1 ,w2 , wk 3;
V1 V2 V3 V4 V5 V6 V7 V8V1 V2 V3 V4 V6 V7 V8 V5
d0 + d1 + + dn-1 = O(e) di i n O(n2)
V1 V2 V3 V4 V5 V6 V7 V8V1 V2 V3 V4 V5 V6 V7 V8V1 V2 V4 V8 V5 V6 V3 V7V1 V2 V4 V8 V5 V6 V3 V7
V1 V2 V3 V4 V6 V7 V8 V5V1 V2 V4 V8 V3 V6 V7 V5
nn-1nn-17.4
V1 V2 V4 V8 V5 V3 V6 V7V1 V2 V3 V4 V5 V6 V7 V8
nnn(n-1)/2nn-1n-1
(Prim)N=(V,{E})TENU={u0},(u0V), TE=uU,vV-U(u,v)E(u0,v0)(u0,v0)TEv0UU=VT=(V,{TE})N
: 6?
U={ V1 }U={ V1,V3 }U={ V1,V3,V6}U={ V1,V3,V6,V4 }U={ V1,V3,V6,V4,V2 }U={ V1,V3,V6,V4,V2,V5 }
: G : closedge[ ]U V-UviV-U ,closedge[i-1],Closedge[i-1].lowcost=Min{cost(u,vi)| uU} Closedge[i-1].adjvexU :u,v) (u,v)TEuUvj
1 1 1 1 1 1 0 6 1 5 max max 1 3 1 1 3 3 0 5 0 5 6 4U={ v1}U={ v1,v3}UUviV-U ,closedge[i-1],Closedge[i-1].lowcost=Min{cost(u,vi)| uU} Closedge[i-1].adjvexUV-U={ v2,V3,V4,V5,V6 }V-U={ v2, V4,V5,V6 }
0 v1 v1 v1 0 0 0 6 1 5 max max lowcost{v1}iadjvex 0 1 2 3 4 5 Uclosedge v1 v2 v3 v4 v5 v6
(Kruskal)N=(V,{E})nT=(V,{})ETTT
ijAOV(Activity On Vertex network)AOVvivjvjviAOV 7.5
AOV~AOVAOV
C1--C2--C3--C4--C5--C7--C9--C10--C11--C6--C12--C8 C9--C10--C11--C6--C1--C12--C4--C2--C3--C5--C7--C8AOV
0VjVjVkVk1Vk0ntypedef struct node{ int vex; // struct node *next; //}JD;typedef struct tnode{ int vexdata; int in; // struct node *link; //}TD;TD g[M]; //g[0]
16
6
6
6
6
6
6
6 1
6 1
6 14
6 14
6 14
6 143
6 143
6 143
6 143
6 143
6 1 343
6 1 34
6 1 34
6 1 34
6 1 342
6 1 342
6 1 342
6 1 3 242
6 1 3 24
6 1 3 2 44
6 1 3 2 4
6 1 3 2 45
6 1 3 2 45
6 1 3 2 4 55
6 1 3 2 4 5
T(n)=O(e)0T(n)=O(n)T(n)=O(n+e)
7.6 119 V1V91 2
AOE(Activity On Edge)AOE~Ve(j)VjVl(j) Vje(i) ail(i) ail(i)-e(i)ai~l(i)=e(i)
e(i)=l(i)aidut()1e(i)=Ve(j) 2l(i)=Vl(k)-dut()Ve(j)Vl(j)
Ve(i)Vl(j)e(i)l(i)l(i)-e(i)V1V2V3V4V5V6V7V8V90645771614180668710161418a1a2a3a4a5a6a7a8a9a10a11
V1Ve[1]=0,Ve[i]VnVl[n]=Ve[n],Vl[i]VeVle[i]l[i],e[i]=l[i]typedef struct node{ int vex; // int length; struct node *next; //}JD;typedef struct tnode{ int vexdata; int in; // struct node *link; //}TD;TD g[M]; //g[0]
Ve[i]Vl[i]e[i]l[i],e[i]=l[i]
2 Status CriticalPath(ALGraph G){ if (! ToplogicalOrder(G, T)) return ERROR vl[0..G.vexnum-1]=ve[G.vexnum-1]; while (! StackEmpty(T)) for (Pop(T, j), p=G.vextices[j].firstarc; p; p=p->nextarc) { k=p->adjvex; dut=*(p->info); if (vl[k]-dutadjvex; dut=*(p->info); ee=ve[j]; el=vl[k]-dut; tag= (ee==el) ? '*:; printf(j,k,dut,ee,el, tag ); } }
7.7 13
813192120
(Dijkstra)V1S2V-S=TTS1V0S V0T 2 SV0 TV0S V0TVkV0Vk V0SVk
S={V0},T={}TTWSTWV0ViWSS=V
13
8
30
32
V2:8
13
-------13
30
32
V1:13
-------
-------13
30
22
20
V3:13
-------
-------
-------19
22
20
V4:19
--------
--------
--------
--------21
20
V6:20
ad[ ][ ]dist[ ]V0pre[ ]V0V00
13
8
13
19
21
20
T(n)=O(n)
Dijkstran T(n)=O(n)(Floyd)n0
T(n)=O(n)
01(vi,vj)A[i,j]A[j,i]