82组终期报告【数据结构与算法基础】-精品Word文档格式.docx

上传人:b****1 文档编号:13054879 上传时间:2022-10-03 格式:DOCX 页数:41 大小:833.99KB
下载 相关 举报
82组终期报告【数据结构与算法基础】-精品Word文档格式.docx_第1页
第1页 / 共41页
82组终期报告【数据结构与算法基础】-精品Word文档格式.docx_第2页
第2页 / 共41页
82组终期报告【数据结构与算法基础】-精品Word文档格式.docx_第3页
第3页 / 共41页
82组终期报告【数据结构与算法基础】-精品Word文档格式.docx_第4页
第4页 / 共41页
82组终期报告【数据结构与算法基础】-精品Word文档格式.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

82组终期报告【数据结构与算法基础】-精品Word文档格式.docx

《82组终期报告【数据结构与算法基础】-精品Word文档格式.docx》由会员分享,可在线阅读,更多相关《82组终期报告【数据结构与算法基础】-精品Word文档格式.docx(41页珍藏版)》请在冰豆网上搜索。

82组终期报告【数据结构与算法基础】-精品Word文档格式.docx

一、课程项目实施方案

1.课程设计要求:

根据校园各主要生活、学习、活动等场所、地点,设计并实现基于校园各场所之间的最短路径漫游。

要求:

(1)掌握数据结构的输入/输出;

(2)设计与实现校园各主要场所之间的最短路径算法;

(3)根据场所之间的最短路径及不同场所之间的路况信息,设置相应的步行、骑行等出行方式,计算到达每一目的地的时间及总的路程耗时;

(4)各主要场所、地点以及漫游状态,以地图缩、放方式动态展示;

(5)校园各主要场所、地点不少于50个。

2.设计思想:

具体分析:

(1).打开初始界面,直接输入起始点与终点,实现最短路径查询、校园场所的介绍等功能。

(2).操作方式

I.最短路径查询:

分别选择界面中“起始点”与“终点”的下拉框里的50个校园场所,点击“查询”按钮,会在界面上方的“最短路径”小框中出现最短路径的具体方案,以及大致的距离,同时在界面地图上以动画方式展现出具体的最短路径。

如果起点与终点的场所选择相同,会出现

“选择错误,您选择的起点与终点是相同的”的提示。

II.校园场所介绍:

鼠标点击校园地图中50个场所之一,会在“校园介绍”

中显示该场所名称以及可直达的校园地点。

(3).结束最短路径查询之后,点击界面上的退出按钮从而退出界面。

根据对课程项目设计要求的分析,我们程序设计的流程图大致如下:

开始

用VS打开登陆界面

输入起点和终点

显示最短路径

退出

3.算法基础:

【Dijkstra算法】

1.定义概览

Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。

主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。

注意该算法要求图中不存在负权边。

问题描述:

在无向图G=(V,E)中,假设每条边E[i]的长度为w[i],找到由顶点V0到其余各点的最短路径。

(单源最短路径)

2.算法描述

1)算法思想:

设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径,就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。

在加入的过程中,总保持从源点

v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。

此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。

2)算法步骤:

a.初始时,S只包含源点,即S={v},v的距离为0。

U包含除v外的其他顶点,即:

U={其余顶点},若v与U中顶点u有边,则<

u,v>

正常有权值,若u不是v的出边邻接点,则<

权值为∞。

b.从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。

c.以k为新考虑的中间点,修改U中各顶点的距离;

若从源点v到顶点u的距离

(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。

d.重复步骤b与c直到所有顶点都包含在S中。

3代码

/*用迪杰斯特拉算法求有向网G的V0顶点到其他顶点的最短路径P,以及其带权长度D。

其中P是二维数组,行号表示终点,列号表示经过的路径。

P[v][w]为

TRUE的意思就是从v0到v,要经过w点)。

D是一维数组,表示某顶点到v0点的路径长(D[v]==10表示从v0到v要经过的路径长度为10。

final存放已经求得的路径结果(比如final[v]为TRUE表示已经找到v0到v的最短路径)。

*/

void ShorttestPath_DIJ(

MGraph G, int v0,PathMatrix &

P,

ShortPathTable &

D)

{

for( v = 0;

v <

G.vexnum;

++v )

final[v] =

FALSE;

D[v] =

G.arcs[v0][v];

for( w = 0;

w <

G.vexnum;

++w )

P[v][v0] = TRUE;

P[v][v] = TRUE;

}

D[v0] = 0;

final[v]

= TRUE;

/*下面开始主循环,每次求得v0到某个v顶点的最短路径,同时刷新之前的最短路径。

for( i = 1;

i <

++i )

{ // 对于除了v0之外的

顶点(这个循环仅仅限制次数,i的值不用).

P[v][w] = FALSE;

min =

INFINITY;

// 假定初始的“最小

if(

INFINITY )

D[v]

<

值”为无穷大。

{ //如果有直接互通的两个顶点,直接将这个路径赋值到数组P[v]。

w <



!

final[w] ) // w顶点在V-S

中,即还未确定的顶点。

if( D[w] <

min )

v = w;

min = D[w];

// 随着循环进行,依与v0的距离大小,从小到大取得顶点v,并标记进

final。

w++ )

{ // 更新路径

final[w] &

&

(min +G.arcs[v][w] <

D[w]))

D[w] = min + G.arcs[v][w];

P[w] = P[v];

// 把一行都给赋值了

P[w][w] = TRUE;

final[v]TRUE;

// 标记已经找到

=

for( w

0;

【弗洛伊德算法】

Floyd-Warshall算法(Floyd-Warshallalgorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。

Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为

O(N2)。

1)算法思想原理:

Floyd算法是一个经典的动态规划算法。

用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。

从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所在)

从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。

所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k)+Dis(k,j)<

Dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j)

=Dis(i,k)+Dis(k,j),这样一来,当我们遍历完所有节点k,Dis(i,j)中记录的便是i

到j的最短路径的距离。

2).算法描述:

a.从任意一条单边路径开始。

所有两点之间的距离是边的权,如果两点之间没

有边相连,则权为无穷大。

b.对于每一对顶点u与v,看看是否存在一个顶点w使得从u到w再到v

比己知的路径更短。

如果是更新它。

3).Floyd算法过程矩阵的计算 十字交叉法

方法:

两条线,从左上角开始计算一直到右下角如下所示

给出矩阵,其中矩阵A是邻接矩阵,而矩阵Path记录u,v两点之间最短路径所必须经过的点

相应计算方法如下:

最后A3即为所求结果

3.算法代码实现

typedefstruct

//图中当前的顶点数与边数

char vertex[VertexNum];

//顶点表

intedges[VertexNum][VertexNum];

//邻接矩阵,可看做边表

int n,e;

}MGraph;

voidFloyd(MGraphg)

  intA[MAXV][MAXV];

  intpath[MAXV][MAXV];

  inti,j,k,n=g.n;

  for(i=0;

i<

n;

i++)

  for(j=0;

j<

j++)

  {  

A[j]=g.edges[j];

  path[j]=-1;

□}

  for(k=0;

k<

k++)

  {

  

if(A[j]>

(A[k]+A[k][j]))

  

A[j]=A[k]+A[k][j];

  path[j]=k;

 }

4.软件基础:

MicrosoftVisualStudio

简介:

MicrosoftVisualStudio(简称VS)是美国微软公司的开发工具包系列产品。

VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。

所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows

Mobile、Windows CE、.NET Framework、.NET Compact Framework与

MicrosoftSilverlight及WindowsPhone。

项目用途:

制作登陆界面,编写主程序,子程序以及展示最终结果。

界面制作过程:

本界面采用c++语言,按钮包含起始点,终点,校园路径查询,路程显示等。

其中起点与终点包括A楼,AJ楼,B楼,BJ楼,C楼,CJ楼,D楼,DJ楼,J楼,E楼,EJ楼,文化广场,F楼,FJ楼,G楼,GJ楼,水秀,伟长楼,音乐学院,南门,游泳馆,训练馆,体育馆,风雨操场,图书馆,尔美,中间点1,美院下沉式广场,中间点2,中间点3,中间点4,中间点5,山明,益新,教育超市,西门,中间点6,中间点7,中间点8,中间点9,中间点10,南二门,中间点,东门,校内楼

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

当前位置:首页 > 经管营销 > 公共行政管理

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

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