第2关:图的深度优先遍历

  • 任务要求
  • 参考答案
  • 评论2
  • 任务描述
  • 相关知识
  • 编程要求
  • 测试说明

任务描述

本关任务:以邻接矩阵存储图,要求编写程序实现图的深度优先遍历。

相关知识

图的深度优先遍历类似于树的先序遍历, 是树的先序遍历的推广,其基本思想如下:

  1. 从某个顶点v出发,访问此顶点。
  2. 访问一个与v邻接的顶点u之后,再从u出发,访问与u邻接且未被访问的顶点w,依此类推。
  3. 当到达一个所有邻接顶点都被访问的顶点时,则又从最后被访问过的顶点开始,依次退回到最近被访问的尚有邻接顶点的末被访问过的顶点,从该顶点出发,重复步骤 2 和 3 ,直到所有被访问过的顶点的邻接顶点都被访问过为止。

在程序里完成遍历需要在函数体外定义全局访问标志数组,记录顶点是否被访问过,初始时,所有元素均为0,表示所有顶点未被访问过:

int visited[MAX_VERTEX_NUM] = {0};

访问每个顶点时,定义输出顶点数据的专用函数:

 
  1. void visit(VertexType i)
  2. {
  3. printf("%s ",i); // VertexType是char [20]类型
  4. }

以邻接矩阵作为存储结构进行深度优先遍历的算法如下:

深度优先遍历的代码分为两部分,遍历的图可能是非连通图,从一个顶点出发,可能不能遍历所有顶点,故对于每个顶点都要检查一次,是否被访问过,如果没有,从这个没被访问的顶点出发执行一次深度优先遍历,算法如下:

 
  1. void DFSTraverse(Mgraph G)
  2. {
  3. // 初始条件:图G存在,vi是顶点的输出函数的指针。
  4. // 操作结果:从第1个顶点起,深度优先遍历图G,并对每个顶点访问一次且仅一次
  5. int v;
  6. for(v=0;v<G.vexnum;v++)
  7. visited[v]=0; // 访问标志数组初始化(未被访问)
  8. for(v=0;v<G.vexnum;v++)
  9. if(!visited[v])
  10. DFS(G,v); // 对尚未访问的顶点v调用DFS
  11. printf("\n");
  12. }

编程要求

根据提示,在右侧编辑器补充代码,实现以邻接矩阵作为存储结构的图深度优先遍历算法:

  • void DFS(MGraph G,int v); // 从第v个顶点出发递归地深度优先遍历图G
  • void DFSTraverse(MGraph G); // 图G存在,从第1个顶点起,深度优先遍历图G,并对每个顶点调用函数visit一次且仅一次

测试说明

平台会对你编写的代码进行测试:

测试输入: 0 lt2.txt

输入说明: 第一行输入0,表示输入图的类型为有向图。 第二行输入文件名,该文件里保存了图的数据信息,内容如下:

有向图的世界里

第1行为图的顶点的个数n; 第2行为图的边的条数m; 第3行至第n+2行是n个顶点的数据; 第n+3行至第n+m+2行是m条边的数据;

预期输出: 有向图 7个顶点9条边。顶点依次是: 高等数学 程序设计基础 C语言 离散数学 数据结构 编译原理 操作系统 图的邻接矩阵: 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 深度优先遍历序列: 高等数学 C语言 数据结构 编译原理 操作系统 离散数学 程序设计基础

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h>
#include<limits.h> 

#include"MGraph.h"

void DFS(MGraph G,int v);// 从第v个顶点出发递归地深度优先遍历图G 
void DFSTraverse(MGraph G);// 图G存在,从第1个顶点起,深度优先遍历图G,并对每个顶点调用函数visit一次且仅一次 

int visited[MAX_VERTEX_NUM]; // 访问标志数组(全局量) 

int main()
{
   MGraph g;
	VertexType v1,v2;
	CreateGraphF(g); /* 利用数据文件创建无向图*/
	Display(g); /* 输出无向图*/  
	printf("深度优先遍历序列:\n"); 
	DFSTraverse(g);
	return 0;
}



void DFS(MGraph G,int v)
{
	// 从第v个顶点出发递归地深度优先遍历图G 
	/********** Begin **********/
	int w;
	visited[v]=1;
	visit(G.vexs[v]);
	for(w=FirstAdjVex(G,G.vexs[v]);w>=0;w=NextAdjVex(G,G.vexs[v],G.vexs[w]))
		if(!visited[w])
			DFS(G,w);
	/********** End **********/
}

void DFSTraverse(MGraph G)
{   //图G存在,从第1个顶点起,深度优先遍历图G,并对每个顶点调用函数visit一次且仅一次 
	/********** Begin **********/
	int v;
	for(v=0;v<G.vexnum;v++)
		visited[v]=0;
	for(v=0;v<G.vexnum;v++)
		if(!visited[v])
			DFS(G,v);
	printf("\n");
	/********** End **********/
}

输出说明: 第一行输出图的类型。 第二行起输出图的顶点和边的数据信息。 最后一行为从“高等数学”出发进行深度优先遍历的序列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/171919.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

广西梧州盾构机主轴承尺寸测量检测CAV检测上门三维扫描-CASAIM中科广电

一、背景介绍 大型盾构机在掘进过程中&#xff0c;只能前进&#xff0c;不能倒退&#xff0c;盾构机掘进过程中&#xff0c;主轴承“手持”刀盘旋转切削掌子面并为刀盘提供旋转支撑&#xff0c;主轴承一旦失效&#xff0c;会造成严重损失。因此&#xff0c;主轴承是盾构机刀盘…

软件系统运维方案

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 点击获取所有软件开发资料&#xff1a;点我获取

PHP中cookie与session使用指南

PHP中cookie与session使用指南 Cookie和session的出现&#xff0c;是为了解决http协议无状态交互的窘境&#xff0c;它们都用于存储客户端的相关信息 0x01 Cookie使用 简介 Cookie 是一种在客户端存储数据的机制&#xff0c;通常用于记录用户的状态和偏好。下面将介绍如何在…

软件测试最重要的事:测试用例的编写

前言 软件测试用例得出软件测试用例的内容&#xff0c;其次&#xff0c;按照软件测试写作方法&#xff0c;落实到文档中&#xff0c;两者是形式和内容的关系&#xff0c;好的测试用例不仅方便自己和别人查看&#xff0c;而且能帮助设计的时候考虑的更周。 一个好的测试用例必…

企业app软件定制开发的重点是什么?|小程序网站搭建

企业app软件定制开发的重点是什么&#xff1f;|小程序网站搭建 在当今数字化时代&#xff0c;企业对于信息技术的依赖越来越大。为了适应市场需求并提高内部运营效率&#xff0c;许多企业开始寻求定制开发企业app软件。这种定制开发可以根据企业的具体需求和业务流程进行个性化…

DITTEL控制器维修SENSITRON6-2AE

DITTEL工控产品维修包括&#xff1a;德国DITTEL平衡测试仪维修,DITTEL模块&#xff0c;过程监控模块&#xff0c;DITTEL控制器&#xff0c;平衡头&#xff0c;机电平衡头&#xff0c;显示器&#xff0c;平衡系统等产品。 DITTEL过程控制模块维修 DM6000是一个过程控制模块&…

5分钟带你了解什么是原型图!

原型图&#xff0c;亦称原型设计稿&#xff0c;在软件研发流程中是非常基础和重要的一类设计项目。而对于产品经理、交互设计师以及产品运营等职业群体来说&#xff0c;原型设计则是一门不可或缺的技能。并且&#xff0c;原型设计也是一门有门槛、有规范的工作。 什么是原型图…

【通俗易懂】git原理、安装及连接gitlab,github

目录 一、GIT原理【这部分也挺简单&#xff0c;可以看看&#xff0c;如果没时间可以直接跳到第二部分】 SVN与Git的的区别 二、安装Git 2.1 获取Git安装程序 2.2 Git安装过程 三、Git连接Gitlab 3.1 gitlab准备工作 3.2 本地计算机准备工作及配置git 四、Git连接Github…

【EI会议征稿】第七届电子器件与机械工程国际学术会议(ICEDME 2024)

第七届电子器件与机械工程国际学术会议&#xff08;ICEDME 2024&#xff09; 2024 7th International Conference on Electron Device and Mechanical Engineering 第七届电子器件与机械工程国际学术会议&#xff08;ICEDME 2024&#xff09;将于2024年3月15-17日在山西太原召…

Sui生态多家协议上线流动质押,兼顾收益与灵活性

在Sui上&#xff0c;流动质押协议允许DeFi用户质押SUI&#xff0c;并获得可交易或用于其他DeFi活动的流动质押标记token。这一过程绕过了传统质押中验证节点锁定token的问题。用户可以通过Sui的权益证明机制&#xff08;PoS&#xff09;确保网络的安全&#xff0c;同时参与生态…

微波功率计/频率计-87234系列USB峰值/平均功率计

仪器仪表 苏州新利通 87234系列 USB峰值/平均功率计 频率范围覆盖&#xff1a;50MHz&#xff5e;67GHz 一款基于USB 2.0接口的二极管检波式宽带功率测量仪器 国产思仪功率计 01 产品综述 87234D/E/F/L USB峰值/平均功率计是一款基于USB 2.0接口的二极管检波式宽带功率测…

GNSS技术在交通运输领域的创新应用

全球导航卫星系统&#xff08;GNSS&#xff09;技术在交通运输领域发挥着越来越重要的作用&#xff0c;为汽车导航、航空、海运等交通模式提供了精准的定位和导航服务。本文将深入探讨GNSS技术在交通运输领域的应用&#xff0c;以及它对交通管理、安全性和效率的积极影响。 一、…

嵌入式开发、C++后台开发、C++音视频开发怎么选择?

嵌入式开发、C后台开发、C音视频开发怎么选择&#xff1f; 在日常生活中&#xff0c;视频类应用占据了我们越来越多的时间&#xff0c;各大公司也纷纷杀入这个战场&#xff0c;不管是抖音、快手等短视频类型&#xff0c;虎牙、斗鱼等直播类型&#xff0c;腾讯视频、爱奇艺、优酷…

vue中使用echarts渐变柱状图 Cannot read properties of undefined (reading ‘graphic‘)解决方法

在使用渐变颜色时报错&#xff0c;Cannot read properties of undefined (reading ‘graphic’) echarts也下载了&#xff0c;引入了&#xff0c;就是报错&#xff0c;用不了new charts&#xff0c; 结果换了一个版本号就可以了&#xff0c;本来用的"echarts": "…

机器学习介绍与分类

随着科学技术的不断发展&#xff0c;机器学习作为人工智能领域的重要分支&#xff0c;正逐渐引起广泛的关注和应用。本文将介绍机器学习的基本概念、原理和分类方法&#xff0c;帮助读者更好地理解和应用机器学习技术。 一、机器学习的基本概念 机器学习是一种通过从数据中学…

leetcode——设计循环队列

设计循环队列 这个题目在这里小编只分享一个解题思路&#xff0c;因为还有一个思路小编还在尝试&#xff0c;一直过不了&#xff0c;还在这里不断尝试&#xff0c;等我试出来的时候我在分享给大家&#xff0c;首先我们在这里给出的是数组的形式&#xff0c;后面在分享单链表的思…

PHP手动为第三方类添加composer自动加载

有时候我们要使用的第三方的类库&#xff08;SDK&#xff09;没用用composer封装好&#xff0c;无法用composer进行安装&#xff0c;怎么办呢&#xff1f;&#xff1f;&#xff1f; 步骤如下&#xff1a; 第一步、下载你需要的SDK文件包&#xff0c;把它放在vendor目录下 第二…

mricorn 手动勾画ROI并保存为模版的方法步骤

mricorn软件手动勾画ROI&#xff1a; 这里拿一个做了切除手术的癫痫病人举例子&#xff0c;我们需要把切除区域勾画出来并保存成切除的模版。 1、将图像导入到mricorn中 2、逐层勾画ROI并填充 比较方便的是从切除区域的起始层进行勾画&#xff0c;这里为了方便展示只勾画中间…

重装系统后如何恢复以前的文件?详细教程大揭秘!

在日常生活中&#xff0c;我们可能会遇到各种计算机问题&#xff0c;其中最严重的问题之一就是需要重装系统。在重装系统之前&#xff0c;我们通常需要考虑一个问题&#xff1a;重装系统后还能恢复以前的文件吗&#xff1f; 首先&#xff0c;我们需要明确一点&#xff0c;重装…

家政保洁预约小程序app开发特点有哪些?

家政预约服务小程序APP开发的特点介绍&#xff1b; 1. 低成本&#xff1a;用户通过手机APP下单&#xff0c;省去了中介费用&#xff0c;降低了雇主的雇佣成本。 2. 高收入&#xff1a;家政服务人员通过手机APP接单&#xff0c;省去了中介费用&#xff0c;从而提高了服务人员的…