82组终期报告【数据结构与算法基础】-精品Word文档格式.docx
《82组终期报告【数据结构与算法基础】-精品Word文档格式.docx》由会员分享,可在线阅读,更多相关《82组终期报告【数据结构与算法基础】-精品Word文档格式.docx(41页珍藏版)》请在冰豆网上搜索。
一、课程项目实施方案
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,南二门,中间点,东门,校内楼