- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验四 图的遍历算法
实验四 图的遍历算法
4.1.实验的问题与要求
1.如何
2.如何用这些算法解决实际问题?
3.熟
4.熟练掌握图的两种搜索路径的遍历方法
5.掌握有关图的操作算法并用高级语言实现
4.2.实验的基本思想和基本原理
4.2.1 深度优先搜索(Depth-First Traversal)
深度优先搜索是一种递归的过程,正如算法名称那样,深度优先搜索所遵循的搜索策略是尽可能“深”地搜索图。在深度优先搜索中,对于最新发现的顶点,如果它还有以此为起点而未探测到的边,就沿此边继续下去。当结点v的所有边都己被探寻过,搜索将回溯到发现结点v有那条边的始结点。这一过程一直进行到已发现从源结点可达的所有结点为止。如果还存在未被发现的结点,则选择其中一个作为源结点并重复以上过程,整个进程反复进行直到所有结点都被发现为止。
1.图的深度优先遍历的递归定义G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。(Depth-First Search)。相应地,用此方法遍历图就很自然地称之为图的深度优先遍历。2.深度优先搜索的过程x是当前被访问顶点,在对x做过访问标记后,选择一条从x出发的未检测过的边(x,y)。若发现顶点y已访问过,则重新选择另一条从x出发的未检测过的边,否则沿边(x,y)到达未曾访问过的y,对y访问并将其标记为已访问过;然后从y开始搜索,直到搜索完从y出发的所有路径,即访问完所有从y出发可达的顶点之后,才回溯到顶点x,并且再选择一条从x出发的未检测过的边。上述过程直至从x出发的所有边都已检测过为止。此时,若x不是源点,则回溯到在x之前被访问过的顶点;否则图中所有和源点有路径相通的顶点(即从源点可达的所有顶点)都已被访问过,若图G是连通图,则遍历过程结束,否则继续选择一个尚未被访问的顶点作为新源点,进行新的搜索过程。
:
(1)、首先访问一个顶点vi(初始点),将其标记为已访问过(因为图的每个顶点可能有多个前驱和后继,所以当一个顶点被访问以后,必须记录它已经被访问,以避免再次被访问,为此设置一个辅助数组visited[n], false),即为常量0,表明尚未被访问,一旦访问了顶点vi,就将对应元素visited[i]设置为逻辑值真,即为常量1,表明vi已被访问)。
(2)、然后从vi的任一未被访问过的邻接点出发进行深度优先搜索遍历,当vi所有邻接点均被访问过,则退回到上一个顶点vk,从vk的另一个未被访问过的邻接点出发进行深度优先搜索遍历,直到退回到初始点并且没有未被访问过的邻接点为止。
(1)访问vo, 记录visited[0]=True, v0的一个未被访问过的邻接点v1出发遍历;
(2)访问v1, visited[1]=True,从v1的一个未被访问过的邻接点v4出发遍历;
(3)访问v4, visited[4]=True,从v4的一个未被访问过的邻接点v5出发遍历;
(4)访问v5, visited[5]=True,由于v5的两个邻接点v1和v4都被访问过,退回上一邻接点v4,又v4的两个邻接点v1和v5都被访问过,再退回上一邻接点v1,从未被访问过邻接点V6出发遍历;
(5)访问v6, visited[6]=True,从v6的一个未被访问过的邻接点v2出发遍历;
(6)访问v2, visited[2]=True,v2所有邻接点都访问过,退回上一顶点v6,同理,v6退回v1,v1退回v0,再从v0未被访问过邻接点v3出发遍历;
(7)访问v3, visited[3]=True,退回v0,因所有邻接点都访问过,再退回,结束。
3.邻接表表示的深度优先搜索非递归算法(参考代码):
#define MAXVEX 100
void dfs(adjlist g,int v,int n)
/*从顶点v出发进行深度优先遍历*/
{
struct vexnode *stack[MAXVEX], *p;
int visited[MAXVEX],top=0;
for(i=1;i=n;i++)
visited[i]=0;
printf(“%d”,v);
p=g[v].link;
visited[v]=1;
while(top0||
您可能关注的文档
最近下载
- 2025年浙能集团甘肃有限公司新能源项目招聘22人笔试备考试题及答案解析.docx VIP
- DB21∕T 3722.7-2025 高标准农田建设指南 第7部分:高标准农田工程施工质量评定规范.docx VIP
- 偏差的公式:相对平均偏差(RAD)相对偏差(RD)标准偏差(SD).docx VIP
- 微创手术器械的检查与保养.pptx VIP
- 附着式抱杆组塔施工方案(外抱杆).doc VIP
- 陕22N1 供暖工程 替代陕09N1.docx
- 3.4.3 护理安全管理(二-1).doc VIP
- 《新方略》高考加油包(冲刺背诵版)(1)(1).docx VIP
- 《GBT1873-1995-磷矿石和磷精矿中二氧化硅含量的测定重量法和容量法》.pdf
- 人工智能提高英语学习效率.docx VIP
文档评论(0)