数据结构课程设计报告.docx

上传人:b****6 文档编号:6672984 上传时间:2023-01-08 格式:DOCX 页数:9 大小:198KB
下载 相关 举报
数据结构课程设计报告.docx_第1页
第1页 / 共9页
数据结构课程设计报告.docx_第2页
第2页 / 共9页
数据结构课程设计报告.docx_第3页
第3页 / 共9页
数据结构课程设计报告.docx_第4页
第4页 / 共9页
数据结构课程设计报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告.docx

《数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告.docx(9页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告.docx

数据结构课程设计报告

 

课程设计报告

数据结构课程设计:

DIJKSTRA算法

学院

计算机与通信工程

专业名称

物联网工程

班级学号

学生姓名

指导教师

 

2014年07月08日

目录

 

DIJKSTRA算法

1基本功能描述

1.1题目:

对任意图,选择合适的数据结构表示图,在此基础上实现求解最短路径的Dijkstra算法。

1.2要求:

对所设计的图的数据结构,提供必要的基本功能。

1.3具体任务:

建立图的表示模块;

在建立图之后从单源点开始求最短路径,并显示出最短路径长度及路径途径!

2设计思路

2.1数据存储结构

(1)本次课设参考用图如下

(2)图的存储方式以邻接矩阵存储无向图,表示如下

(3)达成目的如下,找到V0到V8的最短路径

2.2DIJKSTREA算法思想

(1)贪心选择性质

Dijkstra算法是应用贪心算法设计策略的一个典型例子。

它所做的贪心选择是从V-S中选择具有特殊路径顶点u,从而确定从源到u的最短路径长度Dist[u]。

(2)最优子结构性质

算法中确定的dist[u]确实是当前从源到顶点u的最短特殊路径长度。

(3)计算复杂性

对于一个具有n个顶点和e条边的带权有向图,如果用带权临接矩阵表示这个图,那么Dijkstra算法的主循环体需要O(n)时间。

这个循环需要执行n-1次,所以完成循环需要O(n*n)。

3软件设计

4结论与心得体会

此次数据结构课程设计,我们学会了。

5参考文献

《计算机算法设计与分析》

《算法导论》

《大话数据结构》

6附录

6.1调试结果

6.2源代码

#include"stdio.h"

#include"stdlib.h"

#defineMAXEDGE20

#defineMAXVEX20

#defineINIT65535

typedefstruct

{

intvexs[MAXVEX];

intarc[MAXVEX][MAXVEX];

intnumVertexes,numEdges;

}MGraph;

typedefintPatharc[MAXVEX];/*用于存储最短路径下标的数组*/

typedefintShortPathTable[MAXVEX];/*用于存储到各点最短路径的权值和*/

/*构件图*/

voidCreateMGraph(MGraph*G)

{

inti,j;

/*printf("请输入边数和顶点数:

");*/

G->numEdges=16;

G->numVertexes=9;

for(i=0;inumVertexes;i++)/*初始化图*/

{

G->vexs[i]=i;

}

for(i=0;inumVertexes;i++)/*初始化图*/

{

for(j=0;jnumVertexes;j++)

{

if(i==j)

G->arc[i][j]=0;

else

G->arc[i][j]=G->arc[j][i]=INIT;

}

}

G->arc[0][1]=1;

G->arc[0][2]=5;

G->arc[1][2]=3;

G->arc[1][3]=7;

G->arc[1][4]=5;

G->arc[2][4]=1;

G->arc[2][5]=7;

G->arc[3][4]=2;

G->arc[3][6]=3;

G->arc[4][5]=3;

G->arc[4][6]=6;

G->arc[4][7]=9;

G->arc[5][7]=5;

G->arc[6][7]=2;

G->arc[6][8]=7;

G->arc[7][8]=4;

 

for(i=0;inumVertexes;i++)

{

for(j=i;jnumVertexes;j++)

{

G->arc[j][i]=G->arc[i][j];

}

}

}

/*Dijkstra算法,求有向网G的v0顶点到其余顶点v的最短路径P[v]及带权长度D[v]*/

/*P[v]的值为前驱顶点下标,D[v]表示v0到v的最短路径长度和*/

voidShortestPath_Dijkstra(MGraphG,intv0,Patharc*P,ShortPathTable*D)

{

intv,w,k,min;

intfinal[MAXVEX];/*final[w]=1表示求得顶点v0至vw的最短路径*/

for(v=0;v

{

final[v]=0;/*全部顶点初始化为未知最短路径状态*/

(*D)[v]=G.arc[v0][v];/*将与v0点有连线的顶点加上权值*/

(*P)[v]=-1;/*初始化路径数组P为-1*/

}

(*D)[v0]=0;/*v0至v0路径为0*/

final[v0]=1;/*v0至v0不需要求路径*/

/*开始主循环,每次求得v0到某个v顶点的最短路径*/

for(v=1;v

{

min=INIT;/*当前所知离v0顶点的最近距离*/

for(w=0;w

{

if(!

final[w]&&(*D)[w]

{

k=w;

min=(*D)[w];/*w顶点离v0顶点更近*/

}

}

final[k]=1;/*将目前找到的最近的顶点置为1*/

for(w=0;w

{

/*如果经过v顶点的路径比现在这条路径的长度短的话*/

if(!

final[w]&&(min+G.arc[k][w]<(*D)[w]))

{/*说明找到了更短的路径,修改D[w]和P[w]*/

(*D)[w]=min+G.arc[k][w];/*修改当前路径长度*/

(*P)[w]=k;

}

}

}

}

intmain(void)

{

inti,j,v0;

MGraphG;

PatharcP;

ShortPathTableD;/*求某点到其余各点的最短路径*/

v0=0;

CreateMGraph(&G);

ShortestPath_Dijkstra(G,v0,&P,&D);

printf("最短路径倒序如下:

\n");

for(i=1;i

{

printf("v%d-v%d:

",v0,i);

j=i;

while(P[j]!

=-1)

{

printf("%d",P[j]);

j=P[j];

}

printf("\n");

}

printf("\n源点到各顶点的最短路径长度为:

\n");

for(i=1;i

printf("v%d-v%d:

%d\n",G.vexs[0],G.vexs[i],D[i]);

return0;

}

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1