收藏 分享(赏)

Dijkstra最短路径.doc

上传人:j35w19 文档编号:7051797 上传时间:2019-05-04 格式:DOC 页数:7 大小:135KB
下载 相关 举报
Dijkstra最短路径.doc_第1页
第1页 / 共7页
Dijkstra最短路径.doc_第2页
第2页 / 共7页
Dijkstra最短路径.doc_第3页
第3页 / 共7页
Dijkstra最短路径.doc_第4页
第4页 / 共7页
Dijkstra最短路径.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、福建农林大学计算机与信息学院(程序设计类课程)实验报告课程名称: 数据结构姓 名: 吴秋月系: 计算机专 业: 计算机科学与技术(专升本)年 级: 2008 级学 号: 081806111指导教师: 黄思先职 称: 副教授福建农林大学计算机与信息学院实验报告系: 计科(专升本) 专业: 计算机科学与技术 年级: 08 级 姓名: 吴秋月 学号: 081806111 实验室号:_田 514 计算机号: 18 实验三 Dijkstra 最短路径(验证性)一、 实验目的和要求1,掌握图的有关图相关操作算法2,熟悉图的基本存储方法3,了解掌握图的基本术语二、 实验内容和原理实验内容:已知某交通网中,由

2、站点 (源点)出发到达 等 5 个结点(终点)的可能路径 1 2 3 4 5 6如下有向连通网所示。编程计算和输出从 出发到达其它 5 个结点的最短路径和路径的长度。 1实验原理:这是一个典型的单源点最短路径问题,可以利用 Dijkstra 算法求解。有向连通的交通网信息,可以采用带权的邻接矩阵存储。运用 Dijkstra 算法计算出各最短路径上每个终点的前驱站点以及各最短路径的长度,再利用栈通过回溯的方法输出最短路径。三、 实验环境硬件环境:多媒体实验室学生用微机局域网环境软件环境:Windows xp professionalTurbo C/C+ for windows 四、 算法描述及实

3、验步骤1,算法描述 1 2 3 4 5 6 16 35 69 1 28 8 2 19 1 3 3 5 10 4 11 5 7 61 确定 2 确定 6 确定 4 确定 3 确定 5 确定2,算法描述及实验步骤在 Turbo C/C+ for windows 中新建的名为 Dijkstra.c 的 C 程序文件,在编译窗口编写程序代码,若编译链接都通过,则运行程序,得出正确的结果,正确的程序代码及相关注释如下所示:#include “stdio.h“#include “conio.h“#include “alloc.h“#define N0 10 /宏定义一个常量 N0 值#define inf

4、i 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; /定义一个整形二维数组 adjmatrixAdjList adjlist;int n; /表示结点个数 0 116 135 1 169 1

5、1 0 116 135 1 169 124 20 116 135 131 669 124 20 116 134 431 636 424 20 116 134 431 635 324 20 116 134 431 635 324 2void createAdj() int i,j,w,k; / w 表示权值,k 表示是否的有向图还是无向图ArcNode *p;freopen(“c:dijkstra.in“,“r“,stdin); /可用文件进行输入freopen(“c:dijkstra.out“, “w“, stdout); /可用文件进行输出scanf(“%d“, /输入个数 nscanf(“

6、%d“, /K 为 0 时是无向图,为 1 是有向图 .for(i=1;in | jn) /若 i、j 不在所给的范围当中,就结束该循环break;adjmatrixij=w; /把 w 权值写入 i 行 j 列的邻接距阵里p=adjlisti.first; /头指针指向 p while(p 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的头指针adjlist

7、i.first=p; /链表 adjlisti的第一个指针在指向 p adjlistj.degree+;if(k=0) adjmatrixji=w;p=(ArcNode*)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) / 用 d

8、ijkstra 算法实现最短路径 int distN0+1, pathN0+1, markN0+1; /*定义 3 个数组,dist 存储源点到个结点最短路径,path 存储源点到当前结点路径上的倒数第 2 个点,mark 存储的数为 2 时表示结点未确定,为 1 时表示结点已确定。*/int i,j,k,min; for(i=1; idistk+(long)adjmatrixkj) /如果未确定的结点j 在经过刚已确定的结点 k 的路径比当前结点值小 distj=distk+adjmatrixkj; /*修改结点 j 的路径值,路径值为上一次已确定的结点 k 的路径值加上结点 k 到 j 的

9、路径值 */pathj=k; /修改结点 j 的 path 值为上次已确定的 k 结点for(i=1; i=n; i+) if(i!=x) /如果 i 不等于源点 x printf(“%d-“, i); k=pathi; /k 为源点到 i 路径上的倒数第 2 个结点 while(k!=x) / 当 k 不等于 x ,循环输出 printf(“%d-“, k);k=pathk; /直到 k 为源点printf(“%d:%dn“, k, disti); /输出源点和总路径值main()clrscr(); /清屏createAdj(); printf(“nDijkstra:n“);dijkstra(1); /源点为 1,即从 1 开始。五、 调试过程调试表明调试通过,运行程序便可以得出正确结果。六、 实验结果输入相应的数据,得出结果,截图如下:七、 总结通过这次试验,了解最短路径的概念,掌握构建单源最短路径的方法。学会了Dijkstra:算法,而且通过该算法使我更熟悉编程的一些语法和思想。参考文献:1 宁正元,王秀丽 算法与数据结构 清华大学出版社 20062 严蔚敏 吴伟民 数据结构(C 语言版) 清华大学出版社 20063 宁正元,王秀丽 算法与数据结构习题精解和实验指导 清华大学

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报