版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、福建农林大学计算机与信息学院(程序设计类课程)实验报告课程名称:数据结构姓 名:吴秋月系:计算机专 业:计算机科学与技术(专升本年 级:2008级学 号:081806111指导教师:黄思先职 称:副教授福建农林大学计算机与信息学院实验报告系: 计科(专升本) 专业: 计算机科学与技术 年级: 08级 姓名: 吴秋月 学号: 081806111 实验室号:_田514 计算机号: 18 实验三 Dijkstra最短路径(验证性一、 实验目的和要求1,掌握图的有关图相关操作算法2,熟悉图的基本存储方法3,了解掌握图的基本术语二、 实验内容和原理实验内容:已知某交通网中,由站点(源点)出发到达等5个结
2、点(终点)的可能路径如下有向连通网所示。编程计算和输出从出发到达其它5个结点的最短路径和路径的长度。实验原理:这是一个典型的单源点最短路径问题,可以利用Dijkstra算法求解。有向连通的交通网信息,可以采用带权的邻接矩阵存储。运用Dijkstra算法计算出各最短路径上每个终点的前驱站点以及各最短路径的长度,再利用栈通过回溯的方法输出最短路径。三、 实验环境硬件环境:多媒体实验室学生用微机局域网环境软件环境:Windows xp professionalTurbo C/C+ for windows 四、 算法描述及实验步骤1,算法描述 16 35 69 28 8 19 1 3 5 10 11
3、7 0116135116911 011613511691242011613513166912420116134431636424201161344316353242011613443163532421确定 2确定 6确定 4确定 3确定 5确定2,算法描述及实验步骤在Turbo C/C+ for windows中新建的名为Dijkstra.c的C程序文件,在编译窗口编写程序代码,若编译链接都通过,则运行程序,得出正确的结果,正确的程序代码及相关注释如下所示:#include "stdio.h"#include "conio.h"#include &quo
4、t;alloc.h"#define N0 10 /宏定义一个常量N0值#define infi 32767 /宏定义一个常量infi值typedef int AdjMatrixN0+1N0+1;typedef struct arcnode int v,w; /v表示顶点,w表示权值struct arcnode next;ArcNode;typedef struct node int degree; /表示度ArcNode *first; /指向ArcNode的第一个指针AdjListN0+1;AdjMatrix adjmatrix; /定义一个整形二维数组adjmatrixAdjLi
5、st adjlist;int n; /表示结点个数 void createAdj( int i,j,w,k; / w表示权值,k表示是否的有向图还是无向图ArcNode *p;freopen("c:dijkstra.in","r",stdin; /可用文件进行输入freopen("c:dijkstra.out", "w", stdout; /可用文件进行输出scanf("%d",&n; /输入个数nscanf("%d",&k; /K为0时是无向图,为1是有向图
6、.for(i=1;i<=n; i+ /初始化邻接矩阵for(j=1; j<=n; j+if(i=j adjmatrixij=0; /若i=把0赋给adjmatrixijelse adjmatrixij=infi; /若i!=j,把infimax赋给adjmatrixijdo scanf("%d%d%d", &i,&j, &w; /输入I,j,w的值if(i<1 | i>n | j<1 | j>n /若i、j不在所给的范围当中,就结束该循环break;adjmatrixij=w; /把w权值写入i行j列的邻接距阵里p
7、=adjlisti.first; /头指针指向p while(p && p->v!=j p=p->next;if(p continue;p=(ArcNode*malloc(sizeof(ArcNode; /给p分配新空间p->v=j; p->w=w; / j赋给p的顶点,w赋给p的权值p->next=adjlisti.first; / p的下一个结点指向adjlisti的头指针adjlisti.first=p; /链表adjlisti的第一个指针在指向p adjlistj.degree+;if(k=0 adjmatrixji=w;p=(ArcNod
8、e*malloc(sizeof(ArcNode; /给p分配新空间p->v=i; p->w=w; / i赋给p的顶点,w赋给p的权值p->next=adjlistj.first; / p的下一个结点指向adjlisti的头指针 adjlistj.first=p; /链表adjlisti的第一个指针在指向p adjlisti.degree+;while(1;void dijkstra(int x / 用dijkstra算法实现最短路径 int distN0+1, pathN0+1, markN0+1; /*定义3个数组,dist存储源点到个结点最短路径,path存储源点到当前结
9、点路径上的倒数第2个点,mark存储的数为2时表示结点未确定,为1时表示结点已确定。*/int i,j,k,min; for(i=1; i<=n; i+ marki=2; /初始化mark为2,表示结点未确定pathi=x; /初始化path为源点xdisti=adjmatrixxi; / 源点x到各点的距离分别写入distmarkx=1; /x已经确定for(i=1; i<=n-1; i+ min=infi;k=0;for(j=1; j<=n; j+ /在为确定的结点里找出一个路径最短的if( markj=2 && distj min=distj;k=j;
10、/k为最短路径的结点markk=1; /k结点已经确定for(j=1; j<=n; j+ if( markj=2 &&distj>distk+(longadjmatrixkj /如果未确定的结点j在经过刚已确定的结点k的路径比当前结点值小 distj=distk+adjmatrixkj; /*修改结点j的路径值,路径值为上一次已确定的结点k的路径值加上结点新教师姓名到 j 的路径值 */ pathj=k; /修改结点j的path值为上次已确定的k结点for(i=1; i<=n; i+ if(i!=x如果i不等于源点x printf("%d<-", i; k=pathi;为源点到i路径上的倒数第2班风建设while(k!=x / 当k不等于循环输出见附件k=pathk; /直到kprintf("%d:%dn", k, disti; /见附件main(clrscr(; /清屏createAdj(; printf("nDijkstra:n"dijkstra(1; /源点为1,即从1开始。五、 调试过程调试表明调试通过,运行程序便可以得出正确结果。六、 实验结果输入相应的数据,得出结果,截图如下: 七、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年人活动策划书
- 肺炎性脑膜炎流行病学防控措施
- 精神科检查的主要内容
- 2026年成人高考行政管理专业单套冲刺试卷
- 2026年成人高考机械设计制造及其自动化(本科)模拟单套试卷
- 论网络经济时代市场营销策略的转变1
- 2026年财务管理初级职称考试真题解析及模拟单套试卷
- h7n9禽流感病的防控措施
- 诊断试卷及答案
- 2025-2026学年人教版七年级英语上册词汇语法专项练习(含答案)
- 纳米材料与食品安全课件
- 房车改装采购合同范本
- 施工总包单位建设工程项目初验自评报告
- 工程质量潜在缺陷保险项目风险评估报告
- 2025外交部所属事业单位招聘95人(公共基础知识)综合能力测试题附答案
- 安全环境职业健康法律法规文件清单(2025年12月版)
- 行政执法宣传课件
- 新生儿低血糖的健康宣教
- 物流体系课件
- 介绍嘻哈饶舌说唱
- GB 46750-2025民用无人驾驶航空器系统运行识别规范
评论
0/150
提交评论