数据结构实验四图的深度优先与广度优先遍历.doc

数据结构实验四图的深度优先与广度优先遍历.doc

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

天津理工大学实验报告 学院(系)名称:计算机与通信工程学院 姓名 学号 专业 计算机科学与技术 班级 2009级班 2011年5月12日 第5-8节 实验地点 7号楼215 批改意见 成绩 教师签字: 实验四 图的深度优先与广度优先遍历 实验时间:2011年5月12日,12:50 -15:50(地点:7-215) 实验目的:理解图的逻辑特点;掌握理解图的两种主要存储结构深度优先遍历、广度优先遍历。1)问题描述:在主程序中提供下列菜单: 1…图的建立 2…深度优先遍历图 3…广度优先遍历图 0…结束 2)实验要求:图的存储可采用邻接表或邻接矩阵;定义下列过程: CreateGraph(): 按从键盘的数据建立图 DFSGrahp():深度优先遍历图 BFSGrahp():广度优先遍历图 实验报告格式及要求:按学校印刷的实验报告模版书写。(具体要求见四) 实验思路: 首先,定义邻接矩阵和图的类型,定义循环队列来存储,本程序中只给出了有向图的两种遍历,定义深度优先搜索和广度优先搜索的函数,和一些必要的函数,下面的程序中会有说明,然后是函数及运行结果! #includeiostream #includecstdlib using namespace std; #define MAX_VERTEX_NUM 20//最大顶点数 #define MaxSize 100 bool visited[MAX_VERTEX_NUM]; enum GraphKind{AG,AN,DG,DN};//图的种类,无向图,无向网络,有向图,有向网络 struct ArcNode{ int adjvex; ArcNode * nextarc; }; struct VNode{ int data; ArcNode * firstarc; }; struct Graph{ VNode vertex[MAX_VERTEX_NUM]; int vexnum,arcnum;//顶点数,弧数 GraphKind kind;//图的类型 }; struct SeqQueue{ int *base; int front,rear; }; SeqQueue InitQueue(){//循环队列初始化 SeqQueue Q; Q.base = new int; Q.front=0; Q.rear=0; return Q; } void DeQueue(SeqQueue Q,int u){//出队操作 u = *(Q.base+Q.front); Q.front = (Q.front+1)%MaxSize; } int QueueFull(SeqQueue Q){//判断循环队列是否满 return (Q.front==(Q.rear+1)%MaxSize)?1:0; } void EnQueue(SeqQueue Q,int x){//入队操作 if(QueueFull(Q)){ cout队满,入队操作失败!endl; exit(0); } *(Q.base+Q.rear) = x; Q.rear = (Q.rear+1)%MaxSize; } void CreateDG(Graph G,int n,int e){//初始化邻接表头结点 int j; for(int i=0;in;++i){ G.vertex[i].data=i;G.vertex[i].firstarc=NULL; } for(i=0;ie;++i){ cinij;//输入边的信息 ArcNode* s; s= new ArcNode; s-adjvex = j; s-nextarc = G.vertex[i].firstarc; G.vertex[i].firstarc = s; } } void Visit(Graph G,int u) { coutG.vertex[u].data ; } int FirstAdjVex(Graph G,int v){ if(G.vertex[v].firstarc) return G.vertex[v].firstarc-adjvex; else return -1; } int NextAdjVex(Graph G,int v,int w){ ArcNode* p = G.vertex[v].firstarc; while(p-adjvex!=w) p = p-nextarc; i

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档