Dijkstra最短路径

Dijkstra最短路径

ID:37511519

大小:135.00 KB

页数:7页

时间:2019-05-24

Dijkstra最短路径_第1页
Dijkstra最短路径_第2页
Dijkstra最短路径_第3页
Dijkstra最短路径_第4页
Dijkstra最短路径_第5页
资源描述:

《Dijkstra最短路径》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

2、通网所示。编程计算和输出从出发到达其它5个结点的最短路径和路径的长度。实验原理:这是一个典型的单源点最短路径问题,可以利用Dijkstra算法求解。有向连通的交通网信息,可以采用带权的邻接矩阵存储。运用Dijkstra算法计算出各最短路径上每个终点的前驱站点以及各最短路径的长度,再利用栈通过回溯的方法输出最短路径。三、实验环境硬件环境:多媒体实验室学生用微机局域网环境软件环境:WindowsxpprofessionalTurboC/C++forwindows一、算法描述及实验步骤1,算法描述∞1635∞69∞∞∞28∞∞8∞∞∞191∞∞∞3∞510∞∞∞11∞∞∞∞∞7∞∞011613

3、51∞1691∞101161351∞1691242011613513166912420116134431636424201161344316353242011613443163532421确定2确定6确定4确定3确定5确定2,算法描述及实验步骤在TurboC/C++forwindows中新建的名为Dijkstra.c的C程序文件,在编译窗口编写程序代码,若编译链接都通过,则运行程序,得出正确的结果,正确的程序代码及相关注释如下所示:#include"stdio.h"#include"conio.h"#include"alloc.h"#defineN010//宏定义一个常量N0值#defi

4、neinfi32767//宏定义一个常量infi值typedefintAdjMatrix[N0+1][N0+1];typedefstructarcnode{intv,w;//v表示顶点,w表示权值structarcnodenext;}ArcNode;typedefstructnode{intdegree;//表示度ArcNode*first;//指向ArcNode的第一个指针}AdjList[N0+1];AdjMatrixadjmatrix;//定义一个整形二维数组adjmatrixAdjListadjlist;intn;//表示结点个数voidcreateAdj(){inti,j,w,

5、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是有向图.for(i=1;i<=n;i++)//初始化邻接矩阵for(j=1;j<=n;j++)if(i==j)adjmatrix[i][j]=0;//若i==把0赋给adjmatrix[i][j]elseadjmatrix[i][j

6、]=infi;//若i!=j,把infimax赋给adjmatrix[i][j]do{scanf("%d%d%d",&i,&j,&w);//输入I,j,w的值if(i<1

7、

8、i>n

9、

10、j<1

11、

12、j>n)//若i、j不在所给的范围当中,就结束该循环break;adjmatrix[i][j]=w;//把w权值写入i行j列的邻接距阵里p=adjlist[i].first;//头指针指向pwhile(p&&p->v!=j)p=p->next;if(p)continue;p=(ArcNode*)malloc(sizeof(ArcNode));//给p分配新空间p->v=j;p->w=w;//j赋给

13、p的顶点,w赋给p的权值p->next=adjlist[i].first;//p的下一个结点指向adjlist[i]的头指针adjlist[i].first=p;//链表adjlist[i]的第一个指针在指向padjlist[j].degree++;if(k==0){adjmatrix[j][i]=w;p=(ArcNode*)malloc(sizeof(ArcNode));//给p分配新空间p->v=i;p->w=w;//i赋给p的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。