图数据结构算法
第七章 图 7.1图的定义及运算 基本术语 基本术语 基本术语 基本术语 基本术语 基本术语 基本术语 基本术语 基本术语 图的基本运算 图的基本运算 图的存储结构(数组表示法) 数组表示法 数组表示法 数组表示法的C语言描述 数组表示法的C语言描述 7.2.2 邻接表表示法 邻接表表示法 邻接表表示法 邻接表表示法的C语言描述 邻接表表示法的C语言描述 7.2.3 十字链表表示法 十字链表 7.2.4 邻接多重表表示 7.3 图的遍历 深度优先搜索(DFS) 深度优先搜索算法 7.3.2 广度优先搜索算法 广度优先搜索算法 7.3.3 求连通分量的算法 求连通分量 7.4 最小生成树 7.4.1 Prim算法 Prim算法构造最小生成树 7.4.2 Kruskal算法 最小生成树 第七章小结 为控制广度优先的正确搜索,要用到队列技术,即访问完一个顶点后,让该顶点的序号进队。然后取相应队头(出队),考察访问过的顶点的各邻接点,将未访问过的邻接点访问后再依次进队,……,直到队空为止。 2.算法描述 void BFS(Vnode G[],int v)∥对图G从序号为v的顶点出发,按BFS遍历∥ { int u; qtype Q; Clearqueue(Q); ∥置队Q为空∥ visit(G,v); visited[v]=True; ∥访问顶点、置标志为“真” ∥ Enqueue(Q,v); ∥v进队∥ while(!Emptyqueue(Q)) ∥队非空时∥ { v=Delqueue(Q); ∥出队,队头送v∥ u=firstadj(G,v); ∥取v的第一邻接点序号∥ while(u>=0) { if(visited[u]==False) ∥若u未访问,则访问后进队∥ { visit(G,u); visited[u]=True; Enqueue(Q,u);} u=nextadj(G,v,u); ∥取v关于u的下一邻接点∥ } } } 访问: 队列: A? A G? G B B? E E? C C? D D? F F? A C D B F G E 例: 图的搜索算法是很重要的,可以用它来对图中每一顶点进行必要的处理、求图中各连通分量以及构造图的生成树等等。 求无向图中各连通分量顶点集的算法(设图用邻接表存储)如下: void ConnectComp (Vnode G[],int n) ∥求无向图G中连通分量顶点集,n为顶点数∥ { typedef TF{True,False}vtag; ∥访问标记∥ vtag visited[n]; ∥标志数组∥ int vi; ∥顶点序号∥ for(vi=0;vi
本文详细介绍了图的基本概念和运算,包括数组表示法、邻接表表示法、十字链表表示法和邻接多重表的C语言描述。重点讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的算法实现,并给出了求解连通分量的算法。这些算法在图的遍历、连通性判断以及最小生成树构造等方面有着广泛应用。

6551

被折叠的 条评论
为什么被折叠?



