下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验报告课程名:数据结构(C语言版)实验名:图的遍历姓 名: 班 级: 学 号: 时 间:2014.11.15一 实验目的与要求1. 掌握图的遍历的方法2. 利用 C 语言实现图的遍历二 实验内容 将一个图存储起来 对该图分别进行先深和先广遍历三 实验结果与分析程序:#include <stdlib.h>#include <stdio.h>#define INFINITY 32767#define MAX_VEX 20 /最大顶点个数#define QUEUE_SIZE (MAX_VEX+1) /队列长度/using namespace std
2、;bool *visited; /访问标志数组,避免同一顶点多次访问/*图的邻接矩阵存储结构*/typedef struct char *vexs; /顶点向量 int arcsMAX_VEXMAX_VEX; /邻接矩阵 int vexnum,arcnum; /图的当前顶点数和弧数Graph;/*队列类*/class Queue public: void InitQueue() base=(int *)malloc(QUEUE_SIZE*sizeof(int); front=rear=0; void EnQueue(int e) baserear=e; rear=(rear+1)%QUEUE_
3、SIZE; void DeQueue(int &e) e=basefront; front=(front+1)%QUEUE_SIZE; public: int *base; int front; int rear;/*图G中查找元素c的位置*/int Locate(Graph G,char c) for(int i=0;i<G.vexnum;i+) if(G.vexsi=c) return i; return -1;/*创建无向网*/void CreateUDN(Graph &G) int i,j,w,s1,s2; char a,b,temp; printf("
4、输入顶点数和弧数:"); scanf("%d%d",&G.vexnum,&G.arcnum); temp=getchar(); /接收回车 G.vexs=(char *)malloc(G.vexnum*sizeof(char); /分配顶点数目 printf("输入%d个顶点.n",G.vexnum); for(i=0;i<G.vexnum;i+) /初始化顶点 printf("输入顶点%d:",i); scanf("%c",&G.vexsi); temp=getchar()
5、; /接收回车 for(i=0;i<G.vexnum;i+) /初始化邻接矩阵 for(j=0;j<G.vexnum;j+) G.arcsij=INFINITY; printf("输入%d条弧.n",G.arcnum); for(i=0;i<G.arcnum;i+) /初始化弧 printf("输入弧%d:",i); scanf("%c %c %d",&a,&b,&w); /输入一条边依附的顶点和权值 temp=getchar(); /接收回车 s1=Locate(G,a); s2=Locat
6、e(G,b); G.arcss1s2=G.arcss2s1=w; /*图G中顶点k的第一个邻接顶点*/int FirstVex(Graph G,int k) if(k>=0 && k<G.vexnum) /k合理 for(int i=0;i<G.vexnum;i+) if(G.arcski!=INFINITY) return i; return -1;/*图G中顶点i的第j个邻接顶点的下一个邻接顶点*/int NextVex(Graph G,int i,int j) if(i>=0 && i<G.vexnum &&
7、j>=0 && j<G.vexnum) /i,j合理 for(int k=j+1;k<G.vexnum;k+) if(G.arcsik!=INFINITY) return k; return -1;/*深度优先遍历*/void DFS(Graph G,int k) int i; if(k=-1) /第一次执行DFS时,k为-1 for(i=0;i<G.vexnum;i+) if(!visitedi) DFS(G,i); /对尚未访问的顶点调用DFS else visitedk=true; printf("%c ",G.vexsk);
8、/访问第k个顶点 for(i=FirstVex(G,k);i>=0;i=NextVex(G,k,i) if(!visitedi) DFS(G,i); /对k的尚未访问的邻接顶点i递归调用DFS /*广度优先遍历*/void BFS(Graph G) int k; Queue Q; /辅助队列Q Q.InitQueue(); for(int i=0;i<G.vexnum;i+) if(!visitedi) /i尚未访问 visitedi=true; printf("%c ",G.vexsi); Q.EnQueue(i); /i入列 while(Q.front!=Q
9、.rear) Q.DeQueue(k); /队头元素出列并置为k for(int w=FirstVex(G,k);w>=0;w=NextVex(G,k,w) if(!visitedw) /w为k的尚未访问的邻接顶点 visitedw=true; printf("%c ",G.vexsw); Q.EnQueue(w); /*主函数*/void main() int i; Graph G; CreateUDN(G); visited=(bool *)malloc(G.vexnum*sizeof(bool); printf("n广度优先遍历: "); for(i=0;i<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 4086.4-2025数据分析与决策统计分布数值表第4部分:F分布
- 2025年国际商务专家职业资格考试备考题库及答案解析
- 2025年银行从业人员职业资格《银行业务知识与操作能力》备考题库及答案解析
- 商铺租赁维修责任合同协议2025年
- 商铺租赁合同协议2025年续签条款
- 商场转租合同协议2025年细则
- 汽车租赁2025年合同协议书
- 民宿热水器维修合同协议2025
- 2025年360度全方位绩效考核应用考试试题及答案
- 基金合同合伙协议模板
- 2025江苏海氧深冷科技有限公司招聘工作人员9人考试模拟试题及答案解析
- 广东省广州市花都区2024-2025学年上学期九年级期中考试数学试题(含答案)
- (完整word版)英语四级单词大全
- 2023年学习兴税(电税条线)知识考试题库(含答案)
- 动态心电图简介及操作课件
- 血液透析充分性的评估与管理
- 黑龙江专升本植物生理练习题
- 腹膜透析感染诊治指南
- GB/T 4857.4-2008包装运输包装件基本试验第4部分:采用压力试验机进行的抗压和堆码试验方法
- 《环境保护法》课件
- 美国波多里奇质量奖课件
评论
0/150
提交评论