- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程设计报告“导航路径规划”
江汉大学
课程设计报告
课程名称: 数据结构
设计题目: 导航路径规划
院 (系): 数学与计算机科学学院
专 业: 数学与应用数学
班 级: 10级数学班
组 别:组长: 裴志威201008101127
组员: 李伟 201008101128
分 工:李伟负责编写函数Menu用来显示界面及选择操作;函数Browser用来显示城市名称和编号;函数InitGraph用来录入城市的具体信息
裴志威负责报告书整体规划及编写函数ShortestPath_DJJ用来算出一个城市到其他城市之间的最短路径,并可以看出总路程;函数Floyd用来算出出发点到目的地的最短路线并显示路费
目? 录
一 、 系统功能和结构
1.1 程序设计目的
给定全国公路网络系统(自定义,要求城市个数>=20),根据导航策略(时间最短,里程最短)给出路径规划。系统运行界面自行设计。
1.2 需求分析
城市之间的道路可以有高速公路、普通公路,对图中所有道路必须标识是高速还是普通公路。
两个城市之间可以有高速和普通公路同时存在,且各自里程数可以不同。
约定:两城市之间有高速则高速通行时间最短;全国高速收费标准统一(¥0.5元/km);普通公路不收费。
用户以人机对话方式输入旅行起始、终止城市名(或者代码),选择导航策略(缺省策略是里程最短),程序输出从起点到终点的路径,总路径长度和所需通行费用
任意两个城市之间的通行路径都是存在的(可以有多条)。
必须考虑某些城市之间只有一条道路(高速或者普通公路)的情况;
全国公路网络数据以文件方式输入,但系统可以实现对道路信息的编辑修改(增加、删除、修改道路属性(类型、里程数)
1.3?概要设计
1.3.1???主要数据结构描述
1最短路径(从某个源点到其余各个顶点的最短路径)
void ShortestPath_DJJ(MGraph * G)
{
int v,w,i,min,t=0,x,flag=1;
int final[30],D[30],p[30][30];
cout<<"编号 城市"<<endl;
for(v=0;v<G->vexnum;v++)
cout<<G->vexs[v].num<<" "<<G->vexs[v].name<<endl;
cout<<"*****************************"<<endl;*/
while(flag)
{
cout<<"请输入一个起始点编号";
cin>>v0;
if(v0<0||v0>G->vexnum)
{
cout<<"城市不在此列举的城市中!请重新输入起点编号:";
cin>>v0;
}
if(v0>=0&&v0<G->vexnum)
flag=0;
}
for(v=0;v<G->vexnum;v++)
{
final[v]=0;
D[v]=G->arcs[v0][v].adj;//从起始地点到其他城市的距离
for(w=0;w<G->vexnum;w++)
p[v][w]=0;//设空路径
if(D[v]<INFINITY)
{
p[v][v0]=1;
p[v][v]=1;
}
}
D[v0]=0;//初始化
final[v0]=1;//v0属于最短路径的终点的集合
//开始循环,每次求的v0到某个v顶点的最短路径,并加v到集合中
for(i=1;i<G->vexnum;i++)
{
min=INFINITY;
for(w=0;w<G->vexnum;w++)
if(!final[w])
if(D[w]<min){v=w;min=D[w];}
final[v]=1;
for(w=0;w<G->vexnum;w++)
if(!final[w]&&(min+G->arcs[v][w].adj<D[w]))
{
D[w]=min+G->arcs[v][w].adj;
for(x=0;x<G->vexnum;x++)
p[w][x]=p[v][x];
p[w][w]=1;
}
}
for(v=0;v<G->vexnum;v++)
{
if(v0!=v)cout<<G->vexs[v0].name;
for(w=0;w<G->vexnum;w++)
{
文档评论(0)