master
yangtengze 1 year ago
parent 5785d337c5
commit 50c2acf937

@ -5,16 +5,12 @@
杨腾泽,刘鑫成,李培毅,孙英皓
**摘要**
(1) 基于真实的公路数据建立导航地图模型,编制成格式简单的数据文件包括城市线路名称、站点名称。
(2)系统能够读取公路导航地图数据文件,建立公路模型,也能够将模型输出成数据文件,以便验证模型的正确性。
(3)通过人机交互的方式输入起点和终点站名称,系统给出路径长度最短的导航路径。
(4)能够读取不同的地铁导航地图进行功能测试。
# 1. 系统分析
通过各种算法,实现公路导航
@ -53,7 +49,7 @@
系统中需要读取以下文件以获得城市的边信息数据
creat.cpp
creat.h
功能:创建图结构
@ -61,7 +57,7 @@
输出:无
function.cpp
function.h
功能:连接任意两个点
@ -74,7 +70,7 @@
输入:选择的功能编号
输出返回一个值给main函数
short.cpp
short.h
功能用Dijkstra算法求给出的一点到其余个点的最短路径
输入:源点
@ -82,11 +78,6 @@ short.cpp
功能用floyd算法求给出的两点之间的最好费用
输入:出发地,目的地
输出:地点的最少费用以及路径
### 4参数设定
构建图结构给图中点位赋予编号,名称,简介
@ -97,7 +88,7 @@ short.cpp
功能:修改城市信息
输入:要修改的城市编号,以及修改后的城市信息
输入:要修改的城市编号
输出:无
@ -116,28 +107,6 @@ short.cpp
首先,分析对比几种可选的数据结构设计方案。如图可以采用邻接矩阵,也可以采用邻接表,表示集合可以用普通的查找表,还可以用不相交集。给出每一种设计方案的特点(优势、不足等)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
### 1xxx结构
给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。多个数据结构,逐一列出。
### 2xxx结构
给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。
###
## 2.3 算法设计
首先,分析对比几种可选的算法设计方案。如是否排序,广度优先或深度优先搜索等。给出每一种设计方案的特点(优势、不足)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
### 1XXX算法
给出核心算法的设计,包括伪代码或流程图。多个核心算法,逐一列出。只列举解决问题的核心算法,重点讲清楚是如何解决问题的。
### 2XXX算法
给出核心算法的设计,包括伪代码或流程图。
# 3. 系统实现
@ -238,47 +207,7 @@ int Ppath1(MatGrath &G,int path[][MAXV],int v,int w) //前向递归查找
Ppath1(G,path,k,w); //找顶点k的前一个顶点j
}
```
如下采用floyd算法求给出的两点之间的最少费用
```
void ShortestMoney(MatGrath &G,int v,int w)//求花费最少的路径
{
int A[MAXV][MAXV],path[MAXV][MAXV];
int i,j,k;
for (i=0; i<G.vexnum; i++)
for (j=0; j<G.vexnum; j++)
{
A[i][j]=G.arc[i][j].money;
path[i][j]=-1; //i到j没有边
}
for (k=0; k<G.vexnum; k++)
{
for (i=0; i<G.vexnum; i++)
for (j=0; j<G.vexnum; j++)
if (A[i][j]>A[i][k]+A[k][j])
{
A[i][j]=A[i][k]+A[k][j];
path[i][j]=k;
}
}
if (A[v][w]==INF)
{
if (v!=w)
printf("从%d到%d没有路径\n",v,w);
}
else
{
printf(" 从%s到%s路径费用:%d元人民币 路径:",G.vexs[v].sight,G.vexs[w].sight,A[v][w]);
printf("%s->",G.vexs[v].sight); //输出路径上的起点
Ppath1(G,path,v,w); //输出路径上的中间点
printf("%s\n",G.vexs[w].sight); //输出路径上的终点
}
}
```
## 3.2 核心算法的实现
@ -363,47 +292,6 @@ int Ppath1(MatGrath &G,int path[][MAXV],int v,int w) //前向递归查找
Ppath1(G,path,k,w); //找顶点k的前一个顶点j
}
```
如下采用floyd算法求给出的两点之间的最少费用
```
void ShortestMoney(MatGrath &G,int v,int w)//求花费最少的路径
{
int A[MAXV][MAXV],path[MAXV][MAXV];
int i,j,k;
for (i=0; i<G.vexnum; i++)
for (j=0; j<G.vexnum; j++)
{
A[i][j]=G.arc[i][j].money;
path[i][j]=-1; //i到j没有边
}
for (k=0; k<G.vexnum; k++)
{
for (i=0; i<G.vexnum; i++)
for (j=0; j<G.vexnum; j++)
if (A[i][j]>A[i][k]+A[k][j])
{
A[i][j]=A[i][k]+A[k][j];
path[i][j]=k;
}
}
if (A[v][w]==INF)
{
if (v!=w)
printf("从%d到%d没有路径\n",v,w);
}
else
{
printf(" 从%s到%s路径费用:%d元人民币 路径:",G.vexs[v].sight,G.vexs[w].sight,A[v][w]);
printf("%s->",G.vexs[v].sight); //输出路径上的起点
Ppath1(G,path,v,w); //输出路径上的中间点
printf("%s\n",G.vexs[w].sight); //输出路径上的终点
}
}
```
# 4. 系统测试

Loading…
Cancel
Save