图的数组表示法c语言表示法,图 数据结构+算法.ppt

本文详细介绍了图的基本概念和运算,包括数组表示法、邻接表表示法、十字链表表示法和邻接多重表的C语言描述。重点讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的算法实现,并给出了求解连通分量的算法。这些算法在图的遍历、连通性判断以及最小生成树构造等方面有着广泛应用。

图数据结构算法

第七章 图 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值