图的基本操作与实现.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图的基本操作与实现

课程设计 题 目: 图的基本操作与实现 课 程 名: 算法与程序设计综合课程设计 系 (部): 数学与计算机科学系 专 业: 计算机科学与技术 学生姓名: 学号: 指导教师: 职称(学位): 完成时间: 2014 年 07 月 11 日 池州学院数学与计算机科学系制 概述 任务描述: 输入一个有向图或无向图的信息,实现图的建立,然后从指定的一个顶点开始,演示广度优先遍历该图,输出遍历的顶点的序号。 主要功能: (1)无向图邻接表的建立、无向图邻接表的输出、无向图邻接表的广度遍历 (2)实现从任意一栋教学楼出发,可以不重复的游览完所有教学楼 设计平台 运行环境:windows xp 操作系统 开发工具和编程语言:软件:microsoft visual c++6.0 编程语言:C++ 系统设计 需求分析 核心问题:图的应用 数据模型:(逻辑结构):数组、链表、队列。基于从图中指定的某顶点作为遍历的起点,按照一定搜索遍历路径,对图中所有顶点仅作一次遍历 存储结构:邻接表 核心算法:图的广度优先遍历和深度优先遍历 输入数据:顶点数,边数, 输出数据:顶点、根据遍历方法输出相应游览路线 概要设计:程序流程图: 算法思想: 图的遍历就是从图中指定的某顶点作为遍历的起始出发点,按照一定搜索遍历路径,对图中所有顶点仅作一次 图的深度优先遍历:采取邻接矩阵结构,指定任意顶点x为初始顶点 1.访问结点v并标记结点v已访问; 2.查找结点v的第一个邻接结点w; 3.若结点v的邻接结点w存在,则继续执行,否则算法结束; 4.若结点w尚未被访问,则递归访问结点w; 5.查找结点v的w邻接结点的下一个邻接结点w,转到步骤3。 图的广度优先遍历:采取邻接矩阵结构,指定任意顶点x为初始顶点,利用顺序循环队列以保持访问过的结点的顺序 1.首先访问初始结点v并标记结点v为已访问; 2.结点v入队列; 3.当队列非空时则继续执行,否则算法结束; 4.出队列取得队头结点u; 5.查找u的第一个邻接结点w; 6.若u的邻接结点w不存在则转到步骤3,否则循环执行下列步骤: 6.1若结点w尚未被访问,则访问结点w并标记结点w为已访问; 6.2结点w入队列; 6.3查找结点u的w邻接结点的下一个邻接结点w,转到步骤6 详细设计 算法设计:程序主函数和子函数调用关系图,各个函数的原型声明 程序主函数和子函数调用关系: 函数的原型声明: typedef int elemtype; int x,y; bool visited[n+1]; //标志数组用于记载某个顶点是否被访问过 class link //定义链表类型 { public: elemtype data; link *next; }; class GRAPH //定义邻接表的表头类型 { public: link a[n+1]; void creatlink() //建立图的邻接表 { int i,j,k; link *s; for(i=1;i=x;i++) //建立邻接表头结点 { a[i].data=i; a[i].next=NULL; } void dfs1(int i) //用邻接表从顶点i出发进行深度优先搜索遍历 { link *p; couta[i].data ; //输出访问顶点 visited[i]=true; //全局数组访问标记置为1表示已访问 p=a[i].next; while(p!=NULL) { if(!visited[p-data]) dfs1(p-data); p=p-next; } } void bfs1(int i) //用邻接表从顶点i出发进行广度优先搜索遍历 { in

文档评论(0)

kakaxi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档