




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验三 图的存储结构及各种运算的实现(必做) 计算机与信息技术学院14级3班黄雨梅201421012808计算机科学与技术 实验目的: 1、 掌握图的逻辑结构及其常用的存储表示方法,建立图的邻接表与邻接矩阵。2、 熟练掌握图的深度与广度优先搜索算法的基本思想,并能在不同存储结构上实现算法。3、 深入理解最小生成树的定义,掌握Prim算法和Kruskar算法构造最小生成树的基本思想,并实现Prim算法。4、 掌握用DIJKSTTRA算法求解单源最短路径的基本过程和算法。实验学时:8实验内容:1、建立图的邻接表与邻接矩阵,并在不同存储结构上实现深度与广度优先搜索算法。 2、用Prim算法构造带权网络的最小生成树。 3、用DIJKSTTRA算法求解单源最短路径。 选做部分4、求拓朴序列和关键路径。 第一题: 建立图的邻接表与邻接矩阵,并在不同存储结构上实现深度与广度优先搜索算法 #include #include #define INFINITY 32767 #define MAX_VEX 20 #define QUEUE_SIZE (MAX_VEX+1) 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_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;iG.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(输入顶点数和弧数: ); 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;iG.vexnum;i+) /初始化顶点 printf(输入顶点%d: ,i); scanf(%c,&G.vexsi); temp=getchar(); /接收回车 for(i=0;iG.vexnum;i+) /初始化邻接矩阵 for(j=0;jG.vexnum;j+) G.arcsij=INFINITY; printf(输入%d条弧.n,G.arcnum); for(i=0;i=0 & kG.vexnum) /k合理 for(int i=0;i=0 & i=0 & jG.vexnum) /i,j合理 for(int k=j+1;kG.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=0;i=NextVex(G,k,i) if(!visitedi) /对k的尚未访问的邻接顶点i递归调用DFS DFS(G,i); /广度优先遍历 void BFS(Graph G) int k; Queue Q; /辅助队列Q Q.InitQueue(); for(int i=0;i=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;iG.vexnum;i+) visitedi=false; DFS(G,-1); /* NODE: DFS */ printf(n广度优先遍历: ); for(i=0;iG.vexnum;i+) visitedi=false; BFS(G); /* NODE: BFS */ printf(n程序结束.n); 结果拷屏:第二题:用Prim算法构造带权网络的最小生成树。#include#include#define FALSE 0#define TRUE 1#define max 10typedef char vextype;typedef int adjtype;typedef struct vextype vexsmax;adjtype arcsmaxmax;graph;typedef structint fromvex,endvex;int length;edge;edge Tmax-1;graph g;int n,e;int visitedmax;/建立无向图的邻接矩阵;void creategraph(graph *ga) int i,j,k,w; printf(请输入顶点数和边数:); scanf(%d%d,&n,&e); printf(请输入顶点信息:); getchar(); for(i=0;ivexsi=getchar(); getchar(); for(i=0;in;i+) for(j=0;jarcsij=100; printf(请输入边和权值,用空格间隔,每组输完用回车:n); for(k=0;karcsij=ga-arcsji=w; /最小生成树prim算法;prim()int j,k,m,v,min,nmax=1000;int d;edge e;for(j=1;jn;j+)Tj-1.fromvex=1;Tj-1.endvex=j+1;Tj-1.length=g.arcs0j;for(k=0;kn-1;k+)min=nmax;for(j=k;jn-1;j+)if(Tj.lengthmin)min=Tj.length;m=j;e=Tm;Tm=Tk;Tk=e;v=Tk.endvex;for(j=k+1;jn-1;j+)d=g.arcsv-1Tj.endvex-1;if(dTj.length) Tj.length=d;Tj.fromvex=v; void main() int i,j; creategraph(&g); printf(顶点信息: ); for(i=0;in;i+) printf(%c,g.vexsi); printf(n); printf(图的邻接矩阵是:n); for(i=0;in;i+) for(j=0;jn;j+) printf( %d,g.arcsij); printf(n); printf(最小生成树是:n);prim();for(i=0;i%d:%dn,Ti.fromvex,Ti.endvex,Ti.length);printf(n);拷屏:第三题:用DIJKSTTRA算法求解单源最短路径#include #include #define true 1#define false 0#define nmax 10#define MAX 1000typedef char vextype;typedef int adjtype;typedef struct vextype vexsnmax; adjtype arcsnmaxnmax; graph;typedef struct int fromvex,endvex; int length; edge;graph g;int n,e;int visitednmax;void creategraph(graph *ga) int i,j,k,w; printf(请输入顶点数和边数:); scanf(%d%d,&n,&e); printf(请输入顶点信息:); getchar(); for(i=0;ivexsi=getchar(); getchar(); for(i=0;in;i+) for(j=0;jarcsij=MAX; printf(请输入顶点对序号和权值:); for(k=0;karcsij=w; void dijkstra(int Cnmax,int v) int Dnmax; int Pnmax,Snmax; int i,j,k,v1,pre; int min; v1=v-1; for(i=0;in;i+) Di=Cv1i; if(Di!=MAX) Pi=v; else Pi=0; for(i=0;in;i+) Si=0; Sv1=1; Dv1=0; for(i=0;in;i+) min=MAX+1; for(j=0;jn;j+) if(!Sj) & (Djmin) min=Dj; k=j; Sk=1; for(j=0;jDk+Ckj) Dj=Dk+Ckj; Pj=k+1; for(i=0;in;i+) printf(%dt%d,Di,i+1); pre=Pi; while(pre!=0) printf(-%d,pre); pre=Ppre-1; printf(n); void main() int i,j; creategraph(&g); print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年广元市宝轮中学招聘教师考试笔试试题(含答案)
- 股票行情预测AI模型创新创业项目商业计划书
- 智能药品管理创新创业项目商业计划书
- 2025年工业互联网平台数字签名技术规范与设备性能提升报告
- 2025年工业互联网平台计算机视觉缺陷检测技术:纺织行业智能化转型的关键报告
- 2025年老年教育课程改革与混合式教学模式的应用前景
- 2025年康复医疗器械市场需求与技术创新:创新产品与市场竞争力报告
- 湖北省三市联考2026届高三化学第一学期期中教学质量检测模拟试题含解析
- 2026届河北省部分重点中学化学高二第一学期期末质量跟踪监视试题含答案
- 营养师考试冲刺押题 2025年实操技能与基础理论模拟试卷
- 2025年四川省高考化学试卷真题(含答案解析)
- 教育测量与评价 课件全套 朱德全 第1-15章 教育测量与评价概述- 教育测评结果的统计处理
- 2025年中海油招聘笔试参考题库附带答案详解
- 幼儿园中层干部培训心得体会
- 燃料电池课件
- 学校学生评教表
- 《风力机理论与设计》全套教学课件
- 小学书法练习指导四年级上册教学设计(苏少版)
- 丽声北极星自然拼读绘本第六级 The Clever Beaver 课件
- 1-AMS2628A-2013-中文版
- 食品安全“五常法”管理制度
评论
0/150
提交评论