- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单源结点最短路径问题设计书
1设计内容
单元结点最短路径问题。
问题描述:求从有向图中的某一结点出发到其余各结点的最短路径。
基本要求:
(1)有向图采用邻接矩阵表示。
(2)单元结点最短路径问题采用狄克斯特拉算法。
(3)输出有向图中从源结点到其余各结点的最短路径和最短路径值。
测试数据:如下图有向带权图所示
2算法思想描述
狄克斯特拉算法思想:设置两个顶点的集合S和T,集合S中存放已找到最短路径的顶点,集合T中存放当前还未找到路径的顶点。初始状态时,集合S中包含源点,设为v0,然后从集合T中选择v0路径长度最短的顶点u加入到集合S中,集合S中每加入一个新的顶点u,都要修改源点v0到集合T中剩余顶点的当前最短路径的当前最短路径长度值,集合T中各顶点的新的当前最短路径长度值为原来的当前最短路径长度值与从源点过顶点u到达该顶点的路径长度中的较小者。此过程不断重复,直到集合T中的顶点全部加入到集合S中为止。
3算法及程序实现
#includestdio.h
#includemalloc.h
typedef char DataType; //定义顺序表的数据类型为char
#define MaxSize 10 //定义顺序表数组的最大个数
#define MaxVertices 10 //定义顶点的最大个数
#define MaxWeight 10000 //定义权值的具体最大值
#include AdjMGraph.h //包含AdjMGraph.h头文件
#include AdjMGraphCreate.h //包含AdjMGraphCreate.h头文件
#include Dijkstra.h //包含Dijkstra.h函数的文件
void main(void)
{
AdjMGraph g;
char a[]={A,B,C,D,E,F};
RowColWeight rcw[]= {{0,1,10},{0,2,12},{1,3,16},{1,4,25},{2,0,4},{2,1,3},{2,3,12},
{2,5,8},{3,4,7},{5,3,2},{5,4,10}};
int i,n=6,e=11;
int distance[6],path[6];
CreatGraph(g,a,n,rcw,e);
Dijkstra(g,0,distance,path);
printf(\n\t从顶点%c到其余各顶点的最短路径值分别为:\n,g.Vertices.list[0]);
for(i=1;in;i++)
printf(\t%c到%c 的最短路径值为:%d\n,
g.Vertices.list[0], g.Vertices.list[i],distance[i]);
printf(\n\t从顶点%c到其余各顶点的最短路径的前一顶点为:\n,g.Vertices.list[0]);
for(i=1;in;i++)
if(path[i] !=-1)
printf(\t%c到%c 的最短路径的前一顶点为%c\n,g.Vertices.list[0],
g.Vertices.list[i],g.Vertices.list[path[i]]);
}
4算法测试及结果
从程序的运行结果,再结合测试数据的有向带权图,可以得出,从顶点A到其余各顶点的最短路径及距离如下。
A到B: 最短路径为(A,B),其距离为 10
A到C: 最短路径为(A,C),其距离为 12
A到D: 最短路径为(A,C,F,D),其距离为 22
A到E: 最短路径为(A,C,F,D,E),其距离为 29
A到F: 最短路径为(A,C,F)课程设计对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。通过课程设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容;《数据结构》从课程性质上讲是一门专业基础课,它的目的和任务就是训练学生对计算机加工的数据对象进行分析的能力,选择适当的数据结构及相应算法的能力,训练学生的编码以及调试能力,进而增加其对学习和应用相关专业课的兴趣。 在设计的过程中遇到问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
在整整半个月的日子里,学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。从设计结果看,设计要求完成任务,达到了预期的目的,设计、演
文档评论(0)