7.1 图的定义和术语 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图的应用 7.6 最短路径

  • Upload
    elisa

  • View
    133

  • Download
    9

Embed Size (px)

DESCRIPTION

第 7 章 图. 7.1 图的定义和术语 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图的应用 7.6 最短路径. 本章重点难点. 重点 : (1) 图的定义、术语和性质; (2)ADT 图的设计和实现; (3) 图的邻接矩阵、邻接表的存储结构及其构造方法; (4) 图的两种遍历方法:深度优先遍历和广度优先遍历; (5) 最小生成树的算法、拓扑排序的算法; (6) 理解关键路径的算法,构造最短路径的 Dijkstra 算法和 Floyed 算法。. - PowerPoint PPT Presentation

Citation preview

  • 7.1 7.2 7.3 7.4 7.5 7.6

    1

    7 *

    (1)(2)ADT(3)(4)(5)(6)DijkstraFloyedDijkstraFloyed

    1

    7 *

    7.1 7.2 7.3 7.4 7.5 7.6

    1

    7 *

    7.1 GG= VE G1=V1={v0 ,v1,v2,v3,v4 }E1={ (v0,v1),(v0,v3),(v1,v2), (v1,v4),(v2,v3)(v2,v4) }

    1

    7 *

    (Undigraph) GG(Digraph) GG(Arc) 7.1 G1 V0 V4 V3 V1 V2V0 V1 V2 V3G2

    1

    7 *

    (Undirected Complete Graph)n(n-1)/2(Directed Complete Graph)n(n-1) 7.1 e= (v, u), vu e

    1

    7 *

    vD(v)vv, ID(v); vv, OD(v) 7.1 eDv

    1

    7 *

    7.1 : D=VEv1,v2, ,vk, E (i=1,2,k-1), v =v1, u =vk, vuv=u:G=VEv1,v2, ,vk,(vi,vi+1)E( i=1,2,k-1), v =v1, u =vk, vuv=u

    1

    7 *

    1V0,V1,V2,V3 V0V3V0,V1,V2,V3,V02V0,V2,V3 V0V3 V0,V2,V3,V0G1G2 V0 V4 V3 V1 V2V0 V1 V2 V37.1

    1

    7 *

    7.1 : ,,,

    1

    7 *

    1V0,V1,V2,V3 V0,V1,V2,V4,V12 V0,V2,V3,V0G1G2 V0 V4 V3 V1 V2V0 V1 V2 V37.1

    1

    7 *

    7.1 : ()G=< V, E > vu v u G

    1

    7 *

    7.1 : G=VEG1=V1E1V1 VE1 EE1V1 G1G: ,

    1

    7 *

    7.1 :GG TG T TG TG T

    1

    7 *

    ADT Graph { V

    R

    } ADT Graph 7.1 V , R={VR}VR={v,wVP(v,w)

    1

    7 *

    CreatGraph(&G) //DestroyGraph(&G) // 7.1 InsertVEx(&G, v) //DeleteVEx(&G, v) //InsertArc(&G, v, w) //DeleteArc(&G, v, w) //DFSTraVErse(G, v, Visit()) //BFSTraVErse(G, v, Visit()) //

    1

  • 7.1 7.2 7.3 7.4 7.5 7.6

    1

    7 *

    7.2.17.2.27.2

    1

    7 *

    (1)(2): G=, V={v0,v1,v2, vn-1 },

    7.2

    1

    7 *

    (Adjacency Matrix)7.2.1 Gn A[i][j]=1 (vi,vi+1)E E0

    1

    7 *

    0 1 2 30 0 1 1 11 1 0 0 12 1 0 0 13 1 1 1 0(1)i(2),(3)?7.2.1 V0 V2 V1 V3

    1

    7 *

    0 1 2 30 0 1 1 11 1 0 0 12 1 0 0 13 1 1 1 0(1)i(i)(2)(3)7.2.1 V0 V2 V1 V3

    1

    7 *

    0 1 2 3 401234 0 1 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0v0v4v2v1v3i7.2.1

    1

    7 *

    0 1 2 3 401234 0 1 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0v0v4v2v1v3ii7.2.1

    1

    7 *

    7.2.1 n A[i][j]=Wij (vi,vi+1)E E0

    1

    7 *

    () 0 1 2 3 401234 2 4 2 2 2 v0v4v2v1v3224227.2.1

    1

    7 *

    #define INFINITY INT_MAX //#define MAX_VERTEX_NUM //Typedef enum {DG,DN,UDG,UDN} GraphKind;typedef struct ArcCell { // VRType adj; // VRType InfoType *info; // } ArcCell, AdjMatrix[MAX_VERTEX_NUM] [MAX_VERTEX_NUM];7.2.1

    1

    7 *

    7.2.1 typedef struct { // VErtexType // vexs[MAX_VERTEX_NUM]; AdjMatrix arcs; // int vexnum, arcnum; // GraphKind kind; // } MGraph;

    MGraph G;

    1

    7 *

    2153462030504070807.2.1

    1

    7 *

    ()G7.2.1 G.VExnumG.arcnumG.kind1G.vexs[i];2 G.arcs[i][j].adj=INFINITY; i,j,w,G.arcs[i][j].adj=W; G.arcs[j][i].adj=W

    1

    7 *

    void Creatgraph(MGraph &G){int i,j,k;float w; scanf(%d,%d,%d,G.VExnum,G.arcnum,G.kind);for(i=1;i

  • 7.1 7.2 7.3 7.4 7.5 7.6

    1

    7 *

    7.3.17.3.2 7.3

    1

    7 *

    v1v6v3v2v4v5v7v8v9v1v6v3v2v4v5v7v8v9Visited[9]1111111117.3.1

    000000000

    123456789

    1

    7 *

    7.3.1 (1)Vi(2)ViVjVj;(3)VjVi

    1

    7 *

    :1v;23vwwv(v)7.3.1

    1

    7 *

    void DFS(Graph G, int v) { // v G visited[v] = TRUE; VisitFunc(v); for(w=FirstAdjVEx(G, v);w!=0; w=NextAdjVEx(G,v,w)) if (!visited[w]) DFS(G, w); // vw // DFS} // DFS7.3.1

    1

    7 *

    FALSE, 7.3.1

    1

    7 *

    void DFSTraVErse(Graph G, Status (*Visit)(int v)) { // G VisitFunc = Visit; for (v=0; v

  • 7.1 7.2 7.3 7.4 7.5 7.6

    1

    7 *

    7.4.1 **7.4.2 7.4.3 **7.4.4 7.4

    1

    7 *

    7.4.1

    1

    7 *

    7.4.1 ()()

    1

    7 *

    MSTabcdefg18181915208209315167.4.1 G=(V,E)UV(u,v)(),uUvV-U(u,v) (f,e), (f,d),(g,d),(c,d)(f,e),

    1

    7 *

    7.4.1 G=(V,E)TG (1)U={1|1V}()T={ } (2)min{weight(u,v)|uUvV-U}(ui,vi)TviU (3)bU=V --(Prim)

    1

    7 *

    v2v5v6v4v1v36515536642v2v5v6v4v1v3651100100lowcost0 1 2 3 4 5adjVExclosedge[n]7.4.1 (Prim)

    0615100100

    v1v1v1v1v1

    1

    7 *

    v1-v3:lowcostclosedge[n]0 1 2 3 4 55v306 v3v34 adjVEx7.4.1 (Prim)v2v5v6v4v1v36515536642v2v5v6v4v1v3651100100

    0615100100

    v1v1v1v1v1

    1

    7 *

    v1-v3v3-v6v2v5v6v4v1v351465lowcostclosedge[n]0 1 2 3 4 520v6adjVEx7.4.1 (Prim)v2v5v6v4v1v36515536642

    050564

    v3v1v1v3v3

    1

    7 *

    v1-v3v3-v6v6-v4v2v5v6v4v1v321465v3-v2v2-v5lowcostclosedge[n]0 1 2 3 4 500v23adjVEx7.4.1 (Prim)v2v5v6v4v1v36515536642

    050260

    v3v1v6v3v3

    1

    7 *

    void MiniSpanTree_P(MGraph G, VErtexType u) { k = LocateVEx (G, u ); for ( j=0; j

  • 7.1 7.2 7.3 7.4 7.5 7.6

    1

    7 *

    7.5 7.5.1 7.5.2

    1

    7 *

    DAG DAG(project) 7.5

    1

    7 *

    1

    2

    7.5

    1

    7 *

    7.5.1

    1

    7 *

    1 8 2 4,5 3 4,5 4 5 4,6 6 9 7 6 8 9 9 10 17.5.1

    1

    7 *

    94652381710 1 82 4,53 4,54 5 4,66 97 68 99 10 17.5.1 DAG

    1

    7 *

    (AOV) AOVAOVvivjvivj 7.5.1 AOV

    1

    7 *

    (1);(2);(3);(4)AOV 7.5.1

    1

    7 *

    7.5.1 (1)0(2)(3)ab0()

    1

    7 *

    123897564123897564 7.5.1

    1

    7 *

    indegree[]v1v6v4v32 1 1 0 0 7.5.1

    4

    5

    2^

    5

    5^

    v1v2^V3V4V5^V6

    3

    4^

    2^

    021230

    1

    7 *

    indegree[](1)indegree[],;(2)while() { vi; vi,vj1, vj0,vj; }(3)n,7.5.1

    1

    7 *

    void FindInDegree(ALGraph G, int indegree[]){int i; ArcNode *p; for (i=0;iadjvex]++; p=p->next; } }}7.5.1

    1

    7 *

    Status TopologicalSort(ALGraph G) { SqStack S; int count,k,i; ArcNode *p; int indegree[MAX_VERTEX_NUM]; FindInDegree(G, indegree); // InitStack(S); for (i=0; inextarc) { k = p->adjVEx; if (!(--indegree[k])) Push(S, k); } } if (countinfo > ve[k]) ve[k] = ve[j]+p->info;} } if (countadjvex; dut=p->info; //dut if (vl[k]-dut < vl[j]) vl[j] = vl[k]-dut; }7.5.2

    1

    7 *

    for (j=0; jnextarc) { k=p->adjvex;dut=p->info; ee = ve[j]; el = vl[k]-dut; tag = (ee==el) ? '*' : ' '; printf(j, k, dut, ee, el, tag); // } return OK;} // CriticalPath7.5.2

    1

    7 *

    7.5.2 Ve[i]Vl[i], O(n+e) e[k]l[k]O(e) O(n+e)

    1

  • 7.1 7.2 7.3 7.4 7.5 7.6

    1

  • A B Email,AB 7.6

    1

    7 *

    7.6 7.6.1 7.6.2

    1

    7 *

    7.6.1 GviviG

    1

    7 *

    v0v2v4v1v33262534 Dijkstrav7.6.1

    1

    7 *

    D[5]P[5] 1 5 2 6 2 7 2 0 1 2 3 4final[5]7.6.1 v0v2v4v1v33262534

    0636060

    -100-1-1

    10000

    1

    7 *

    D[5]P[5] 1 1 1 0 1 2 3 4final[5]7.6.1 v0v2v4v1v33262534

    05367

    -12022

    10100

    1

    7 *

    DviS={vi}DvviD[i]viS7.6.1

    1

    7 *

    (1)arcsarcs[i][j]S={vi}DvviD[i](2)vjvjvjS7.6.1

    1

    7 *

    (3)vV-SvkD[j]+arcs[j][k]