数据结构_图遍历的演示
- 格式:docx
- 大小:91.90 KB
- 文档页数:12
数据结构实验报告图的遍历讲解一、引言在数据结构实验中,图的遍历是一个重要的主题。
图是由顶点集合和边集合组成的一种数据结构,常用于描述网络、社交关系等复杂关系。
图的遍历是指按照一定的规则,挨次访问图中的所有顶点,以及与之相关联的边的过程。
本文将详细讲解图的遍历算法及其应用。
二、图的遍历算法1. 深度优先搜索(DFS)深度优先搜索是一种常用的图遍历算法,其基本思想是从一个顶点出发,沿着一条路径向来向下访问,直到无法继续为止,然后回溯到前一个顶点,再选择此外一条路径继续访问。
具体步骤如下:(1)选择一个起始顶点v,将其标记为已访问。
(2)从v出发,选择一个未被访问的邻接顶点w,将w标记为已访问,并将w入栈。
(3)如果不存在未被访问的邻接顶点,则出栈一个顶点,继续访问其它未被访问的邻接顶点。
(4)重复步骤(2)和(3),直到栈为空。
2. 广度优先搜索(BFS)广度优先搜索是另一种常用的图遍历算法,其基本思想是从一个顶点出发,挨次访问其所有邻接顶点,然后再挨次访问邻接顶点的邻接顶点,以此类推,直到访问完所有顶点。
具体步骤如下:(1)选择一个起始顶点v,将其标记为已访问,并将v入队。
(2)从队首取出一个顶点w,访问w的所有未被访问的邻接顶点,并将这些顶点标记为已访问,并将它们入队。
(3)重复步骤(2),直到队列为空。
三、图的遍历应用图的遍历算法在实际应用中有广泛的应用,下面介绍两个典型的应用场景。
1. 连通分量连通分量是指图中的一个子图,其中的任意两个顶点都是连通的,即存在一条路径可以从一个顶点到达另一个顶点。
图的遍历算法可以用来求解连通分量的个数及其具体的顶点集合。
具体步骤如下:(1)对图中的每一个顶点进行遍历,如果该顶点未被访问,则从该顶点开始进行深度优先搜索或者广度优先搜索,将访问到的顶点标记为已访问。
(2)重复步骤(1),直到所有顶点都被访问。
2. 最短路径最短路径是指图中两个顶点之间的最短路径,可以用图的遍历算法来求解。
数据结构课程设计实验1 线性表及其应用1.集合的并、交和差【问题描述】编制一个能演示执行集合的并、交和差运算的程序【基本要求】1)集合的元素限定为小写字母;2)演示程序以用户和计算机的对话方式执行。
void Union(OrderedSet &T,OrderedSet S1, OrderedSet S2){//求已建成的集合Sl和S2的并集T,即:S1.head!=NULL且S2.head!=NULL if(InitList(T){pl=GetEiemPos(Sl,1);p2=GetElemPos(S2,l);while(pl&&p2){cl=Elem(pl); c2=Elem(p2);if(cl<=c2){Append(T,Copy(pl);pl=SuccNode(pl);if(cl==c2) p2=SuccNode(p2);}else{ Append(T,Copy(p2)); p2=SuccNode(p2); }while(pl){ Append( T,Copy(pl)); pl=SuccNode(pl);}while(p2){Append(T,Copy(p2)); p2=SuccNode(p2);}}}//Unionvotd Intersection(OrderedSet &T,OrderedSet S1; OrderedSet S2) {//求集合 Sl 和 S2 的交集 Tif(!InitList(T)) T.head =NULL;else{pl=GetElemPos(S1,1);p2=GetElemPos(S2,l);while(pl&&p2){c1=Elem(p1);c2=Elem(p2);if(cl<c2) pl=SuccNode(pl);else if(cl>c2) p2=SuccNode(p2);else{ //cl==c2Append(T,Copy(pl));pl=SuccNode(pl);p2=SuccNode(p2);}//else}//while}// else}//Intersectionvoid Difference(OrderedSet &T,OrderedSet S1,OrderedSet S2) {//求集合Sl和S2的差集Tif(!InitList(T)) T.head =NULL;else {pl =GetElemPos(S1,l);p2=GetElemPos(S2,1);while(pl&&p2){cl=Elem(pl);c2=Elem(p2);if(cl<c2){Append(T,Copy(pl));pl=SuccNode(pl)else if(cl>c2) p2=SuccNode(p2);else // Cl ==c2{pl =SuccNode(p1);p2=SuccNode(p2);}}//whilewhile(pl){Apend(T,Copy(pl));p =SuccNode(pl);}}//else}//Differencevoid WriteSetElem(LinkType p){//显示集合的一个元素pramtk'Jh WriteElem(Elem(p));}//WriteSetElemvotd Printset(OrderedSet T){//显示集合的全部元素p=GetElemPos(T,1);printf('[']);if(p){WriteElem(Elem(p);p=SuccNode(p);}ListTraverse(p,WriteSetElem());Prtntf(')]');}//Printset实验2 栈、队列和递归程序设计2. 迷宫问题。
图的遍历动态演示程序摘要:图是一种复杂的数据结构,具有较高的学习难度。
本文讲述了对图的动态演示程序的操作和程序的具体实现过程,使得我们对图的认识更深刻,学习更容易。
本软件以Visual Studio 2008作为开发工具,使用邻接表法,用MFC类库实现了对图的可视化创建和图的遍历的动态演示。
本文首先讲解了图的遍历动态演示程序的实现框架和设计思路,然后深入讲解了对图中结点和弧的创建、插入和删除,最后着重讲解了图的深度优先遍历和广度优先遍历动态演示的具体实现。
关键词:图; 遍历; 动态演示The dynamic demonstrative program of traverse graph Abstract:Graph is a complex data structure, which is hard to learn. This thesis tells people the manipulate of the dynamic demonstrate of traverse graph and the specific realization progress of the program. This study give us a deeper understanding of graph, as well as make it easier to learn it. This software realizes the visual creation of graph and the dynamic demonstration of traverse graph by using adjacent table, MFC library and Visual Studio 2008. This thesis firstly explains the realization of the dynamic demonstrate of traverse graph program, the go into the depth of the creation, insertion, deleting of node and arc, at last explains emphatically the actual realization of the Depth-First traverse of graph and the Breadth-First traverse of graph.Key Words:graph, traverse, dynamic demonstrative目录1 引言 (1)1.1 开发背景 (1)1.2 开发的目的以及意义 (1)2 需求分析 (1)2.1 功能概述 (1)2.2 功能需求分析 (2)2.2.1 结点的操作 (2)2.2.2 弧的操作 (2)2.2.3 自动生成图的支持 (2)2.2.4 支持图的销毁 (3)2.2.5 图的遍历类型 (3)2.2.6 图的存储结构 (3)2.2.7 图的遍历代码 (3)2.2.8 支持图的遍历次序显示和中间辅助队列的进出队情况显示 (3)2.2.9 支持对遍历速度的设置 (3)2.2.10 支持暂停和单步 (3)2.2.11 支持对图的实现代码的查看和运行 (4)2.2.12 支持对版本和帮助的显示 (4)3 总体设计 (4)3.1 程序框架的搭建 (4)3.1.1 工程项目的创建 (4)3.1.2 窗口的显示 (4)3.2 菜单的制作 (6)3.2.1 创建图 (6)3.2.2 设置演示速度 (8)3.2.3 查看源代码的实现 (8)3.2.4 运行此程序菜单的实现 (9)3.2.5 打开此文件菜单和帮助菜单的实现 (10)3.2.5 版本菜单的实现 (10)3.2.6 退出菜单功能的实现 (10)3.3图的创建和遍历核心算法的设计与实现 (10)3.3.1 算法的设计 (10)3.3.2 核心算法的实现 (16)4 测试与总结 (28)谢辞 (29)参考文献 (30)1 引言在纷繁复杂的社会生活中,很多东西都涉及到图的应用问题。
数据结构课程设计题⽬《数据结构》课程设计题⽬1. 排序算法的性能分析问题描述设计⼀个测试程序,⽐较⼏种内部排序算法的关键字⽐较次数和移动次数以取得直观感受。
基本要求(1)对冒泡排序、直接排序、选择排序、箱⼦排序、堆排序、快速排序及归并排序算法进⾏⽐较。
(2)待排序表的表长不⼩于100,表中数据随机产⽣,⾄少⽤5组不同数据作⽐较,⽐较指标:关键字参加⽐较次数和关键字的移动次数(关键字交换记为3次移动)。
(3)输出⽐较结果。
选做内容(1)对不同表长进⾏⽐较。
(2)验证各算法的稳定性。
(3)输出界⾯的优化。
2. 排序算法思想的可视化演⽰—1基本要求排序数据随机产⽣,针对随机案例,对冒泡排序、箱⼦排序、堆排序、归并算法,提供排序执⾏过程的动态图形演⽰。
3. 排序算法思想的可视化演⽰—2基本要求排序数据随机产⽣,针对随机案例,,对插⼊排序、选择排序、基数排序、快速排序算法,提供排序执⾏过程的动态图形演⽰。
4. 线性表的实现与分析基本要求①设计并实现线性表。
②线性表分别采取数组(公式化描述)、单链表、双向链表、间接寻址存储⽅式③针对随机产⽣的线性表实例,实现线性表的插⼊、删除、搜索操作动态演⽰(图形演⽰)。
5. 等价类实现及其应⽤问题描述:某⼯⼚有⼀台机器能够执⾏n个任务,任务i的释放时间为r i(是⼀个整数),最后期限为d i(也是整数)。
在该机上完成每个任务都需要⼀个单元的时间。
⼀种可⾏的调度⽅案是为每个任务分配相应的时间段,使得任务i的时间段正好位于释放时间和最后期限之间。
⼀个时间段不允许分配给多个任务。
基本要求:使⽤等价类实现以上机器调度问题。
等价类分别采取两种数据结构实现。
6. ⼀元稀疏多项式计算器问题描述设计⼀个⼀元稀疏多项式简单计算器。
基本要求⼀元稀疏多项式简单计算器的基本功能是:(1)输⼊并建⽴多项式;(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,c n,e n,其中n是多项式的项数,c i,e i,分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相加,建⽴多项式a+b;(4)多项式a和b相减,建⽴多项式a-b;(5)计算多项式在x处的值;(6)计算器的仿真界⾯(选做)7. 长整数的代数计算问题描述应⽤线性数据结构解决长整数的计算问题。
数据结构遍历方法数据结构是计算机科学中非常重要的一个概念,它用于组织和存储数据,以便能够高效地访问和处理。
在实际应用中,我们经常需要对数据结构进行遍历操作,即按照一定的顺序访问其中的元素。
数据结构的遍历方法有多种,常用的有线性结构的顺序遍历、逆序遍历和树形结构的前序遍历、中序遍历和后序遍历等。
本文将详细介绍这些遍历方法,并给出具体的实现代码。
首先,我们来介绍线性结构的顺序遍历方法。
顺序遍历是按照数据结构中元素的存储顺序依次访问每个元素。
对于数组这种连续存储的线性结构,顺序遍历非常简单,只需要使用一个循环即可。
例如,对于一个长度为n的数组arr,顺序遍历的伪代码如下:for i = 0 to n-1访问arr[i]end for对于链表这种离散存储的线性结构,由于元素的存储位置不连续,需要通过指针进行遍历。
遍历链表的伪代码如下:p = headwhile p != null访问p->datap = p->nextend while其中,head表示链表的头节点,p表示当前遍历到的节点,p->data表示节点中存储的数据,p->next表示下一个节点的指针。
除了顺序遍历,线性结构还可以进行逆序遍历。
逆序遍历就是按照相反的顺序访问每个元素。
对于数组,可以倒序遍历,其伪代码如下:for i = n-1 to 0访问arr[i]end for对于链表,可以利用栈的先进后出特性来实现逆序遍历。
具体做法是先将链表中的每个节点入栈,然后依次出栈并访问节点信息。
伪代码如下:p = headstack = new Stack()while p != null将p入栈p = p->nextend whilewhile !stack.isEmpty()p = stack.pop()访问p->dataend while接下来,我们介绍树形结构的遍历方法。
树形结构是一种非线性结构,由根节点和若干子树组成,子树又可以看作是树。
图的遍历操作实验报告一、实验目的本次实验的主要目的是深入理解图的遍历操作的基本原理和方法,并通过实际编程实现,掌握图的深度优先遍历(DepthFirst Search,DFS)和广度优先遍历(BreadthFirst Search,BFS)算法,比较它们在不同类型图中的性能和应用场景。
二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。
实验中使用的数据结构为邻接表来表示图。
三、实验原理(一)深度优先遍历深度优先遍历是一种递归的图遍历算法。
它从起始节点开始,沿着一条路径尽可能深地访问节点,直到无法继续,然后回溯到上一个未完全探索的节点,继续探索其他分支。
(二)广度优先遍历广度优先遍历则是一种逐层访问的算法。
它从起始节点开始,先访问起始节点的所有相邻节点,然后再依次访问这些相邻节点的相邻节点,以此类推,逐层展开。
四、实验步骤(一)数据准备首先,定义一个图的邻接表表示。
例如,对于一个简单的有向图,可以使用以下方式创建邻接表:```pythongraph ={'A':'B','C','B':'D','E','C':'F','D':,'E':,'F':}```(二)深度优先遍历算法实现```pythondef dfs(graph, start, visited=None):if visited is None:visited = set()visitedadd(start)print(start)for next_node in graphstart:if next_node not in visited:dfs(graph, next_node, visited)```(三)广度优先遍历算法实现```pythonfrom collections import deque def bfs(graph, start):visited ={start}queue = deque(start)while queue:node = queuepopleft()print(node)for next_node in graphnode:if next_node not in visited:visitedadd(next_node)queueappend(next_node)```(四)测试与分析分别使用深度优先遍历和广度优先遍历算法对上述示例图进行遍历,并记录遍历的顺序和时间开销。
数据结构课设可视化演示-概述说明以及解释1.引言1.1 概述概述部分的内容可以从以下方面展开:在现代社会中,数据结构是计算机科学中的一个重要领域,其主要研究数据在计算机中的组织、存储和管理方式。
数据结构的设计和实现对于提高程序性能和效率非常关键,尤其在大规模数据处理和复杂计算任务中更为重要。
本文将介绍数据结构课设的可视化演示。
数据结构课设是大多数计算机科学或相关专业的学生必修的一门课程,旨在帮助学生理解和应用不同的数据结构。
通过设计和实现一系列的数据结构,学生能够熟悉并掌握常见的数据结构类型,如数组、链表、堆栈、队列、树、图等。
可视化演示在数据结构课设中起到了重要的作用。
通过可视化手段,学生可以直观地观察和理解数据结构的内部原理和操作过程。
传统的课堂教学可能只能通过文字和图示来解释和演示,而这往往不够形象生动。
而通过可视化演示,学生可以直接观察和体验数据结构在实际运行中的过程,从而更好地理解其特点和性能。
可视化演示还有助于激发学生的学习兴趣和参与度。
通过生动的图像和动画效果,学生可以更加主动地参与到课程中来,提高学习的积极性和主动性。
同时,可视化演示也有助于培养学生的抽象思维和问题解决能力,通过观察和分析演示过程,学生能够更好地理解数据结构的本质和应用范围。
本文将详细介绍数据结构课设的可视化演示,包括不同数据结构的原理和操作过程的演示方法,以及基于现有工具和技术的实现方式。
通过深入的探讨和分析,希望能够为读者提供一个全面、系统和实用的指导,以便更好地应用可视化演示技术进行数据结构课设的学习与实践。
文章结构部分的内容如下:1.2 文章结构本文将分为三个主要部分:引言、正文和结论。
引言部分主要概述了本文的主题和目的。
首先,我们将介绍数据结构课设的背景和重要性,以及为什么我们选择了可视化演示作为主题。
接下来,我们将介绍本文的结构和各部分的内容安排,帮助读者理解本文的组织结构。
正文部分将分为两个小节:数据结构课设介绍和可视化演示的重要性。
图遍历的演示实习报告在计算机科学中,图遍历是一种重要的操作,用于访问图中的节点和边。
为了更深入地理解图遍历的原理和应用,我进行了一次关于图遍历的演示实习。
图是由节点(也称为顶点)和连接节点的边组成的数据结构。
图遍历的目的是按照特定的顺序访问图中的所有节点。
常见的图遍历算法有深度优先搜索(DepthFirst Search,简称 DFS)和广度优先搜索(BreadthFirst Search,简称 BFS)。
在实习中,我首先选择了深度优先搜索算法进行演示。
深度优先搜索就像是在一个迷宫中,选择一条路一直走到底,直到无法前进,然后回溯。
为了实现深度优先搜索,我使用了递归的方法。
以下是一个简单的深度优先搜索的 Python 代码示例:```pythondef dfs(graph, node, visited=):if node not in visited:print(node)visitedappend(node)for neighbor in graphnode:dfs(graph, neighbor, visited)graph ={'A':'B','C','B':'A','D','E','C':'A','F','D':'B','E':'B','F','F':'C','E'}dfs(graph, 'A')```在这个示例中,`dfs`函数接受一个图(以邻接表的形式表示)、当前节点和一个已访问节点的列表作为参数。
如果当前节点未被访问过,就将其打印出来并标记为已访问,然后对其邻居节点递归调用`dfs`函数。
接下来,我演示了广度优先搜索算法。
广度优先搜索则像是以层层扩散的方式访问节点。
它先访问起始节点的所有邻居,然后再依次访问邻居的邻居。
以下是广度优先搜索的 Python 代码示例:```pythonfrom collections import dequedef bfs(graph, start):visited =queue = deque(start)while queue:node = queuepopleft()if node not in visited:print(node)visitedappend(node) queueextend(graphnode) graph ={'A':'B','C','B':'A','D','E','C':'A','F','D':'B','E':'B','F','F':'C','E'}bfs(graph, 'A')```在这个示例中,使用了一个队列来实现广度优先搜索。
安徽省巢湖学院计算机与信息工程学院课程设计报告课程名称《数据结构》课题名称完全二叉树操作演示专业班级计算机科学与技术专升本1班学号********、********、********姓名李鹏王帅李泳波联系方式指导教师严小燕完成日期: 2014年12月27 日目录1 数据结构课程设计任务书 (1)1.1题目 (1)1.2目的 (1)1.3要求 (1)2 总体设计 (1)2.1功能模块设计 (1)2.2所有功能模块流程图 (1)3 详细设计 (2)3.1程序中所采用的数据结构及存储结构的说明 (2)3.2算法设计思想 (3)3.3主要的功能函数 (3)4 调试与测试 (3)4.1调试方法与步骤 (4)4.2测试结果分析与讨论 (4)4.3测试过程中遇到的主要问题及采取的解决措施 (5)5 时间复杂度分析 (6)6 程序清单 (6)7 总结 (12)参考文献 (13)1 数据结构课程设计任务书1.1题目完全二叉树操作演示1.2目的(1)掌握二叉树的概念和性质。
(2)掌握完全二叉树存储结构。
(3)掌握完全二叉树的基本操作。
1.3 要求(1)创建完全二叉树(用字母表示节点)(用顺序方式存储)。
(2)求二叉树的深度和叶子结点数。
(3)实现二叉树的前序、中序、后序和层次遍历。
(4)查找给定结点的双亲、祖先和左右孩子节点。
2 总体设计2.1 功能模块设计根据课程设计题目的功能要求,各个功能模块的组成框图如图1:图 1 功能组成框图2.2 所有功能模块流程图设计好功能模块后,各个模块的关系如下图2:图 2 流程图3 详细设计3.1程序中所采用的数据结构及存储结构的说明(1)整个程序采用结构体与顺序表相结合的编程方法一共完成了7个功能。
在你输入错误时有报错消息,这样使整个程序运行起来更加完整。
程序中有若干个子函数被主函数调用执行。
结构体定义如下:#define MAX 100 //定义100个节点typedef struct{char dat; //节点信息}node;typedef struct Tree //节点组成树{int length;node *r; //指向根节点}Tree;3.2 算法设计思想完全二叉树具有以下几个性质,由此可设计出相应算法。
实习报告题目:图遍历的演示编译环境: Microsoft Visual Studio 2010 功能实现:以邻接表为存储结构,演示在连通无向图上访冋全部节点的操作; 实现连通无向图的深度优先遍历和广度优先遍历;建立深度优先生成树和广度优先生成树,按凹入表或树形打印生成树。
1.以邻接表为存储结构,演示在连通无向图上访问全部节点的操作。
该无向图为一个交通网络,共25个节点,30条边,遍历时需要以用户指定的节点为起点, 建立深度优先生成树和广度优先生成树,再按凹入表或树形打印生成树。
2.程序的测试数据:graph.txt 文件所表示的无向交通图。
//边表结点//邻接点域,即邻接点在顶点表中的下标//顶点表结点 //数据域struct TNode // 树结点{stri ng data;struct TNode *fristchild, * nextchild; };2.邻接表类设计:class GraphTraverse{public:需求分析二、概要设计1.主要数据结构设计:struct ArcNode{int vex In dex; ArcNode* n ext;};struct VertexNode {stri ng vertex; ArcNode* firstArc; };三、详细设计1. 主要操作函数的实现:(1) 建立深度优先生成树函数:TNode* GraphTraverse::DFSForest(i nt v){int i,j;TNode *p,*q,*DT; j=v;for(i=O;i<vertexNumberber;i++) {Visited[i]=0;}for(i=0;i<vertexNumberber;i++) {if(Visited[(i+j)%vertexNumberber]==0) {p=new TNode; p->data=VexList[(i+j)%vertexNumberber].vertex; p->fristchild=NULL; p-> nextchild=NULL; DT=p; q=p;DFSTree(((i+j)%vertexNumberber),p); } }return DT; }(2) 深度优先遍历图函数:VertexNode VexList[MaxSize]; int vertexNumberber; int arcNumberber; bool HasCreated;void ReadFile();void DisplayGraph(); TNode* DFSForest(i nt);void DFSTree(i nt, TNode*); TNode* BFSForest(i nt); void BFSTree(i nt, TNode*); void Prin tTree(TNode*, i nt); };//顶点表数组 //图的顶点数 //图的边数//图是否创建//从文件读取数据,并建立该图 //以邻接表显示图 //建立深度优先生成树 //深度优先遍历图 //建立广度优先生成树 //广度优先遍历图//按照凹入表方式打印树void GraphTraverse::DFSTree( in tv, TNode* DT){int j=0;int i=0;TNode *p,*q;int first=1;Visited[v]=1;for(ArcNode *m=VexList[v].firstArc;m;m=m->n ext) { j=m->vex In dex;if(Visited[j]==0){p=new TNode; p->data=VexList[j].vertex;p->fristchild=NULL;p-> nextchild=NULL;if(first){DT->fristchild=p; first=0;} else q->n extchild=p;q=p;DFSTree(j,q);}}}(3) 建立广度优先生成树函数:TNode* GraphTraverse::BFSForest(i nt v) {int i,j;TNode *p,*q,*BT;BT=NULL;j=v;for(i=0;i<vertexNumberber;i++){Visited[i]=0;} for(i=0;i<vertexNumberber;i++)if(Visited[(i+j)%vertexNumberber]==0) {p=new TNode;{p->data=VexList[(i+j)%vertexNumberber].vertex;p->fristchild=NULL;p-> nextchild=NULL;BT=p;q=p;BFSTree(((i+j)%vertexNumberber),p);}}return BT;}(4) 广度优先遍历图函数:void GraphTraverse::BFSTree(i nt v,TNode*BT) {int fron t=-1;int rear=-1;int j=0;int a,b;int first=1;a=b=0;TNode *m, * n, *r, *cur[MaxSize];r=BT;ArcNode *p;Visited[v]=1;Query[++rear]=v;while(fro nt!=rear){first=1;v=Query[++fr on t];for(p=VexList[v].firstArc;p;p=p->n ext){j=p->vex In dex;if(Visited[j]==0){m=new TNode;m->data=VexList[j].vertex; m->fristchild=NULL;m-> nextchild=NULL;Visited[j]=1;Query[++rear]=j;if(first)r->fristchild=m; first=0;{elsen->n extchild=m; cur[a++]=m; n=m;}} r=cur[b++];}}(5) 打印函数:按照凹入表方式打印树。
void GraphTraverse::Pri ntTree(TNode *T,i nt i){int j;TNode *p; cout«e nds;for(j=1;jv=i;j++){cout«e nds«e nds;}cout<<T->data<<e ndl;for(p=T->fristchild;p;p=p->n extchild) Prin tTree(p,i+1);}2. 主函数的实现:void mai n(){stri ng s1;int flag;TNode *DT,*BT;GraphTraverse graph net;stri ng beg in;int i;flag=atoi(s1.c_str());while(flag>5||flag<1){coutvv"输入错误,请重新输入!"<<endl;cout«endlvv"请输入操作序号:"; cin> >s1;flag=atoi(s1.c_str());} _while(flag!=5)switch(flag){{{case 1:graph net.ReadFile(); break; case 2:graph net.DisplayGraph(); break; case 3:coutvv"请输入遍历起点:"; cin> >beg in;for(i=0;i<graph net.vertexNumberber;i++){if(graph net.VexList[i].vertex==begi n)break; }if(i==graph net.vertexNumberber) {cout«"输入的起点不存在! "<<endl; break; } else {DT=graph net.DFSForest(i);coutvv"深度优先遍历结果如下(凹入表): graph net.Pri ntTree(DT,0); break;} case 4:coutvv"请输入遍历起点:";cin> >beg in;for(i=0;i<graph net.vertexNumberber;i++) {if(graph net.VexList[i].vertex==begi n)break; }if(i==graph net.vertexNumberber) {coutvv"输入的起点不存在! "<<endl; break; } elseBT=graph net.BFSForest(i);coutvv"广度优先遍历结果如下(凹入表):"vve ndl;"vve ndl;graph net.Pri ntTree(BT,O); break;}flag=atoi(s1.c_str());while(flag>5||flag<1){coutvv"输入错误,请重新输入!"<<endl;cout«endlvv"请输入操作序号:"; cin> >s1;flag=atoi(s1.c_str());} _}}四、用户手册1. 本程序的执行文件为:GraphTraverse.exe2. 进入程序的用户界面,并根据程序提示,输入文件名及其路径,读取文件中的数据:* 图堀历演示*-1.读取文件2.显示当前图3-探麹免遍房4.广度优先遍历5.退岀-请输入操作序号:1\CodeSpace\GraphT pau e rs e \g paph-txt :1:读取文件2:显示当前图3:探IWtl 4:广度优先遍历5:退岀:3. 显示当前图:1:读取文件2=显示当前图3= 4:广度优先遍历5:退岀:巒紹n创北存天肄>1<徐州-嘲中徐州-〉天津£>->徐旷南训南昌-〉上海g株洲->广州株洲->南昌株洲->武汉足I-I-I珂M 匚_______________丄」匸_ ■- —H 赫粪鈣如长春H贵阳-〉昆明贵阳成都柳州-〉贵阳柳州-〉南宁L■历演示4.输入遍历起点,进行深度优先遍历(或者广度优先遍历)五、测试结果程序的主要测试结果如下: 1.读取文件,并显示当前图:1:读取文件2=显示当前图3:探1 勰翳4:广度优先遍历氐退岀:1:读取文件2:显示当前图3:深4:广度优先遍历5=退岀:请输入操作序号:1英算入文籠名-E- MCodeSpace ^jGi^aphTi^auerse Xarraph-txt春阳刑长沈兰兰春Afl->->明2霉Lc>>j一-津刃Rr畫->->=>->2接津州嘗上南ff7->:2^肄阳^^3-->莎7衣.^=->>>>>>>>>>>>>>>J-J口&早>>>>>>>曬京津州窖常宀阳连明坦丁州->->宁洲州西株郑|'|->州谢广->TT->特洲州宀贏忙株郑西路乎^^京州阳->D->->->->->「兰木2.输入遍历起点,进行深度优先遍历:1:徴取交件2:显示当前图3-跺厲輕霸乩广度优先遍历「退出:1:诵取文件2:显示当前图4躁!I 勰霸4:广度优先遍历G 退出: 倩输入操作序号*3. 输入遍历起点,进行广度优先遍历:京下匕Q 3 J J S A :果 号点结哇冃--iL 冃深d 齐 木 特昌hHH 蛊 $- 杀呼 J Z 4Z 宁圳卅 洲柳广南 阳株 明贵 都昆 * ■1:读取文件显示当前圉轧深融盂齬4:广度优先遍历久退出:六、附录源程序文件清单:GraphTraverse.hGraphTraverse.cppGraphMa in. cpp 涼QT 4TT 女 :果 号占结 序起历 作历遍 f i 和.三ip ; I ; ■ ! 羸乌西宀盘 州上 州西 徐 »b i 关 【宁圳 一 哪漏探 洲柳广 武 一 昊长 f c r r L I L 天〃邻接表类以及主要数据结构的声明 〃邻接表类成员函数的实现。