问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

图遍历的算法

发布网友 发布时间:2022-04-24 07:55

我来回答

1个回答

热心网友 时间:2022-06-17 19:54

图的遍历方法目前有深度优先搜索法和广度(宽度)优先搜索法两种算法。 深度优先搜索法是树的先根遍历的推广,它的基本思想是:从图G的某个顶点v0出发,访问v0,然后选择一个与v0相邻且没被访问过的顶点vi访问,再从vi出发选择一个与vi相邻且未被访问的顶点vj进行访问,依次继续。如果当前被访问过的顶点的所有邻接顶点都已被访问,则退回到已被访问的顶点序列中最后一个拥有未被访问的相邻顶点的顶点w,从w出发按同样的方法向前遍历,直到图中所有顶点都被访问。其递归算法如下:
Boolean visited[MAX_VERTEX_NUM]; //访问标志数组
Status (*VisitFunc)(int v); //VisitFunc是访问函数,对图的每个顶点调用该函数
void DFSTraverse (Graph G, Status(*Visit)(int v)){
VisitFunc = Visit;
for(v=0; v<G.vexnum; ++v)
visited[v] = FALSE; //访问标志数组初始化
for(v=0; v<G.vexnum; ++v)
if(!visited[v])
DFS(G, v); //对尚未访问的顶点调用DFS
}
void DFS(Graph G, int v){ //从第v个顶点出发递归地深度优先遍历图G
visited[v]=TRUE; VisitFunc(v); //访问第v个顶点
for(w=FirstAdjVex(G,v); w>=0; w=NextAdjVex(G,v,w))
//FirstAdjVex返回v的第一个邻接顶点,若顶点在G中没有邻接顶点,则返回空(0)。
//若w是v的邻接顶点,NextAdjVex返回v的(相对于w的)下一个邻接顶点。
//若w是v的最后一个邻接点,则返回空(0)。
if(!visited[w])
DFS(G, w); //对v的尚未访问的邻接顶点w调用DFS
} 图的广度优先搜索是树的按层次遍历的推广,它的基本思想是:首先访问初始点vi,并将其标记为已访问过,接着访问vi的所有未被访问过的邻接点vi1,vi2,…, vi t,并均标记已访问过,然后再按照vi1,vi2,…, vi t的次序,访问每一个顶点的所有未被访问过的邻接点,并均标记为已访问过,依次类推,直到图中所有和初始点vi有路径相通的顶点都被访问过为止。其非递归算法如下:
Boolean visited[MAX_VERTEX_NUM]; //访问标志数组
Status (*VisitFunc)(int v); //VisitFunc是访问函数,对图的每个顶点调用该函数
void BFSTraverse (Graph G, Status(*Visit)(int v)){
VisitFunc = Visit;
for(v=0; v<G.vexnum, ++v)
visited[v] = FALSE;
initQueue(Q); //置空辅助队列Q
for(v=0; v<G.vexnum; ++v)
if(!visited[v]){
visited[v]=TRUE; VisitFunc(v);
EnQueue(Q, v); //v入队列
while(!QueueEmpty(Q)){
DeQueue(Q, u); //队头元素出队并置为u
for(w=FirstAdjVex(G,u); w>=0; w=NextAdjVex(G,u,w))
if(!Visited[w]){ //w为u的尚未访问的邻接顶点
Visited[w]=TRUE; VisitFunc(w);
EnQueue(Q, w);
}
}
}
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 细菌生长的环境因素 什么是图的深度优先遍历?什么是图的广度优先遍历? 考研选学校,应该求稳还是坚持自己的理想院校? 细菌生长环境影响因素 硫细菌、硝化细菌、铁细菌、氢细菌对农业生产和环境有哪些影响? 用邻接表表示图进行深度优先遍历时,通常采用()来实现算法 我与工作单位只签了劳动合同,其他材料全在自己手里,工作未满一年,现在打算辞职,除了辞职报告还需要什 细菌与环境保护 采用邻接表存储的图的深度优先遍历算法类似于二叉树的先序遍历,为什么是先序呢? 暴雨冰雹雷电来袭,湖北连发100多条预警,哪些地区受灾严重? 细菌对环境的坏处,举例子,多点 湖北京山空明山洞的天气预报? 细菌的好处与坏处 细菌的危害主要体现在哪些方面? 假如没有细菌,自然界将会是怎样的 华为手机安全模式解除 华为手机解除安全模式 什么是数学建模 关于数学模型(Mathematical Model)和数学建模(Mathematical Modeling),下列说法正确的是( )。 关于数学建模的介绍谁有啊???详细的。。 细菌在环境保护中的作用 图采用邻接矩阵和邻接链表表示时,深度优先遍历算法的时间复杂度有何不同? 荆门周边有哪里风景好点的,好玩点的 2月7日 太原及周边高速公路路况信息 图的图的遍历 湖北省荆州市公安县天气预报 求c语言图的深度优先遍历算法 滥用抗生素导致超级细菌开始横行,对环境将有哪些影响? 2月18日 太原及周边高速公路路况信息 湖北省竹山县是天气预报播报的哪个区域? 细菌和真菌对环境的作用是( ) 2月14日 太原及周边高速公路路况信息 无向有权的图的深度、广度优先遍历怎么做的啊,他的遍历序列怎么求... 细菌与环境的关系 荆州城墙以内是不是就是荆州城区城墙以外是荆州区 数据结构 图的深度遍历算法 细菌适宜在什么环境里生活 在用邻接表表示图时,对图进行深度优先搜索遍历的算法的时间复杂度为() 湖北省孝冒县天气最近三天 细菌对环境、人类的影响,真菌对环境、人类的影响