




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/* 实验项目名称:图的操作的实现 实验目的与要求: 1.基础知识:掌握数据结构中图的相关知识; 掌握C或VC+语言中程序设计的方法. 2.参考教材相关算法,完成以下程序功能: (1) 利用邻接矩阵完成建图初始化; (2)利用广度优先或深度优先遍历算法编写对已建图的遍历工作; 实验性质:验证性(4学时) 说明:程序包含主要函数:主函数、建图、遍历、相关注释,并注意在程序中体现先建立后遍历的条件约束.*/-无向图的存储与表示-# include stdio.h# include stdlib.h# define M 10 /最大顶点个数int visitedM; /全局访问数组typedef structint vex,arc; /无向图的顶点数和边数char vexsM; /顶点数组int arcsMM; /边数组MGraph;typedef structint *base; /初始化的动态分配存储空间int front; /头指针,若队列不为空,指向队列头元素int rear; /尾指针,若队列不为空,指向队列尾元素的下一个位置Queue;int JianTu(MGraph &G) int s,i,y,j,n,v,x;char c1,c2;do /输入无向图的顶点个数printf (请输入无向图的顶点个数:);scanf (%d,&G.vex);if (G.vexM) /输入有误请重新输入printf (输入有误请重新输入!n);while(G.vexM);s=G.vex*(G.vex-1)/2; /此无向图的最多边数do /输入无向图的边个数printf (请输入无向图的边个数:);scanf (%d,&G.arc);if (G.arcs) /输入有误请重新输入printf (输入有误请重新输入!n);while(G.arcs); for (i=0;iG.vex;i+) /输入无向图的顶点printf (请输入第%d个顶点:,i+1);getchar();scanf (%c,&G.vexsi);for (y=0;yi;y+) /判断输入顶点是否正确while(G.vexsy)=(G.vexsi)printf (输入有误请重新输入第%d个顶点:,i+1);getchar();scanf(%c,&G.vexsi);y=0;for (i=0;iG.vex;i+) /邻接矩阵全置0for (j=0;jG.vex;j+)G.arcsij=0;for (n=0;nG.arc;n+) /输入无向图的边printf(请输入第%d条边用-隔开:,n+1);do /判断输入边是否正确s=0,y=0,v=0,x=0;getchar(); scanf(%c-%c,&c1,&c2);for (i=0;iG.vex;i+) /判断输入的c1是否合法if (c1=G.vexsi) s=1;for (i=0;iG.vex;i+) /判断输入的c2是否合法 if (c2=G.vexsi) y=1;if (c1=c2) v=1; /判断c1和c2是否相等 for(i=0;c1!=G.vexsi;i+); /找到c1所对应的顶点 for(j=0;c2!=G.vexsj;j+); /找到c2所对应的顶点if (G.arcsij=1) x=1;if (s=0|y=0|v=1|x=1)printf (输入有误请重新输入第%d条边用-隔开:,n+1);while(s!=1|y!=1|v=1|x=1);for(i=0;c1!=G.vexsi;i+); /找到c1所对应的顶点for(j=0;c2!=G.vexsj;j+); /找到c2所对应的顶点 G.arcsij=1; /将其对应数组元素置0 G.arcsji=G.arcsij; /置其对称边为1return 1;int DaYin(MGraph G) /打印出邻接矩阵int i,j;printf (此无向图的邻接矩阵为:n);printf ( );for (i=0;iG.vex;i+) /打印所有顶点printf ( %c,G.vexsi);printf (n);for (i=0;iG.vex;i+) /打印邻接矩阵printf (%c,G.vexsi);for (j=0;jG.vex;j+) printf ( %d,G.arcsij);printf (n);return 1;void DFS(MGraph G, int v) /从第v个顶点出发递归地深度优先遍历图Gint i; visitedv=1; /访问第v个顶点 printf (%c ,G.vexsv); /打印第v个顶点 for (i=0;iG.vex;i+)if(G.arcsvi=1&!visitedi) /对v的尚未访问的邻接顶点i递归调用DFSDFS(G,i);void ShenDu(MGraph G,int v) /对图G作深度优先遍历int i; for (i=0;iG.vex;i+) /访问标志数组初始化 visitedi=0; for (i=0;iG.vex;i+) if (!visitedv) /对尚未访问的顶点调用DFS访问DFS(G,v); int InitQueue(Queue &Q) /构造一个空队列Q.base=(int *)malloc(M*sizeof(int); /开辟内存if(!Q.base) /存储分配失败exit(-2);Q.front=Q.rear=0; /给数组下标赋值return 1;int EnQueue(Queue &Q,int e) /输入元素e为Q的新队尾元素if(Q.rear+1)%M=Q.front) /队列已满return 0;Q.baseQ.rear=e;Q.rear=(Q.rear+1)%M; /尾指针后移一个单元return 1;int QueueLengh(Queue Q) /返回Q的元素个数,即队列的长度return (Q.rear-Q.front+M)%M;int DeQueue(Queue &Q,int &e) /若队列不为空,则删除Q的对头元素,用e返回其值,并返回OK;否则返回ERRORif (Q.front=Q.rear) /队列为空,返回ERRORreturn 0;e=Q.baseQ.front;Q.front=(Q.front+1)%M; /头指针后移一个单元return 1;void BFS(MGraph G) /按广度优先非递归遍历图G int i,u; Queue Q; for (i=0;iG.vex;i+) visitedi=0; InitQueue(Q); / 构建队列Q for (i=0;iG.vex;i+) if (!visitedi) /i尚未访问 visitedi=1; /访问i EnQueue(Q,i); /i入队列 while(QueueLengh(Q) /非空队列 DeQueue(Q,u); /队头元素出队并置为uprintf (%c ,G.vexsu); /打印此顶点 for (i=0;iG.vex;i+) if (G.arcsui=1&!visitedi) /u的尚未访问的邻接顶点i入队列Q visitedi=1; EnQueue(Q,i);/if/for/while/if/forint main () /主函数int i,a=0;MGraph G; /定义无向图while(1) system(cls);system(color F0);printf (t|=|tn); printf (t| |tn); printf (t| 无向图的存储与遍历 |tn); printf (t| |tn); printf (t|=|tn); printf (nt【1】 建立无向图并输入数据!t 【2】 打印无向图的邻接矩阵!n); printf (nt【3】 深度优先遍历打印图! t 【4】 广度优先遍历打印图!n); printf (nt【0】 退出程序!n); printf (nnttt请输入你的选择:); /输入选择的功能序号 scanf (%d,&i); switch(i) case 1: /建立无向图并输入数据JianTu(G); /建立无向图并输入数据a=1;system(pause); break; case 2: /打印无向图的邻接矩阵if (a=1) /打印无向图的邻接矩阵DaYin(G);else /未建立无向图printf (未建立无向图!n); system(pause); break;case 3: /深度优先遍历打印图if (a=1) /深度优先遍历打印图printf (深度优先遍历打印图:n);ShenDu(G,0);printf (n);else /未建立无向图printf (未建立无向图!n); system(pause); break;case 4: /广度优先遍历打印图if (a=1) /广度优先遍历打印
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国文化遗产的保护试题及答案
- 行政法学测试知识的试题及答案
- 2025年执业护士职业风险管理试题及答案
- 从容应对护士考试的试题及答案
- 2025年卫生资格考试的适应性备考试题及答案
- 行政法学实践中的挑战试题与答案
- 药师工作中的法律责任简析试题及答案
- 中国处方集附录简介课件
- 2025年行政管理考试的关键试题及答案
- 区域行政中的文化管理创新试题及答案
- 热爱生活主题班会
- DB31T 1487-2024 国际医疗服务规范
- 四川省达州市渠县2023-2024学年八年级下学期期末生物学试题(解析版)
- (高清版)AQ 1079-2009 瓦斯管道输送自动喷粉抑爆装置通 用技术条件
- 2024年广东省深圳市中考地理试卷(含答案)
- 贵州老年大学聘任教师登记表
- 第四单元《学习演讲词》整体设计 说课 课件- 2023-2024学年统编版语文八年级下册
- 遵守银行业监管规定承诺书
- 长沙市教育局所属事业单位招聘教职工笔试真题2021
- 中国古建筑文化与鉴赏智慧树知到期末考试答案章节答案2024年清华大学
- 2024版《隐患排查标准手册》(附检查依据)
评论
0/150
提交评论