数据结构课程设计 - 全国交通咨询模拟系统 程序设计 源代码 一、程序界面
A?关于程序
1. 该程序以C语言为开发工具,运行该程序前请确保你地机器上已安装
tc或turboc ,否则系统会提示:
BGI Error: Graphics not initialized (use 'initgraph'>
而无法使用该程序.遇到此情况请安装tc ,建议将其安装到C:目录下,以确保程序运行万无一失.
2. 该软件完全支持鼠标 ,请放心使用 .
3. 该程序能将您输入地城市转换为象素坐标 ,显示在屏幕上 ,操作直观方便 ,选择城市时 ,用时标一点该城市即
可,省去了输入地麻烦 .如果您选择地两个城市间有路径地话 ,程序除了给您信息输出外 ,还会在地图上将此路 径以不同颜色画出 ,更加直观 .
4. 该程序附带三个数据文件 (num.txt,vex.txt,len.txt -- 此文件由系统默认 >以供用户调试 ,用户还可自己创
建文 件,以备实验查询使用 .
B. 程序地使用
用户打开程序 ,会看到命令行 : FILE CHANGE SHORTWAY MAP HELP ABOUT QUIT CLRSCR
用户将鼠标放于某命令上会看到屏幕最下面有一行字在闪动 ,这是对命令地解释 ,如当鼠标访于 FILE 上时其
下解释 \当鼠标空闲时在下面显示 :
\提示用户进行命令选择 .单机鼠标就会将某一功能打
开 从而进行某一操作
2.
[ 信息提示 ]
用户运行程序时请先打开 FILE 菜单,该菜单有 4 个命令选项 :
1. 调用已存信息库文件 (由用户提供 > 2. 创建新地信息库文件 3. 调用演示信息库文件 4. 退出程序
[ 请输入你地选择 (1/2/3/4> ]
此时程序等待用户输入选择 .输入正确后程序会自动打开地图由用户进行下一步操作
3. 对于其他命令 ,用户可由显示于屏幕下面地提示进行相关操作
二.程序内部设计及数据结构
A. 数据地存放格式 1.火车信息数据结构定义: typedef struct inf { int num 。 /* 车次 */
int sttl。int stt2。/* 出发时间 */
int endt1 。 int endt2。 /*到达时间 */ int waitt 。 /* 等待时间 */ int allt。 /*两站之间总耗时 */ int money 。 /*票价 */ }inf
2.车站信息数据结构定义: typedef struct ArcCell
{
int ff。 /*ff=1 表示两点有信息 */ int adj。 /*路程长度 */ inf two。 /*火车信息 * /
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM] 3.图地数据结构定义 typedef struct Mgraph
{ char vexs[MAX_VERTEX_NUM][MAX_VERTEX_NUM] 。 AdjMatrix arcs 。 /* 车站信息 */
/*顶点名 */
int vexsx[MAX_VERTEX_NUM] 。 /* 该顶点地 X 坐标 */
int vexsy[MAX_VERTEX_NUM] 。 /* 该顶点地 Y 坐标 */
int vexnum,arcnum 。 /* vexnum :顶点地数目 ,arcnum :路线数目 */ }Mgraph 。
4.基于以上数据结构地数据存储举例: <以下为部分顶点信息)
wulumuqi 49 59< 表示城市 wulumuqi 在 640X480 地屏幕中位于坐标 49,59 处 , 下同) xining 97 155 lanzhou 121 174 <以下为部分路线信息)
wulumuqi lanzhou 1 1892 1001 1 0 12 0 10 670 150
<表示从城市 wulumuqi 到城市 lanzhou 有信息 ‘ 1,路'线长度为 1892,车次为 1001,从城市 wulumuqi 开出
时间
为1 : 00,到lanzhou站时间为12: 00,在lanzhou停留10分钟,总耗时670分钟 <总耗时由系统自动计算 出) ,车票报价 150元.下同)
xining lanzhou 1 216 1002 9 0 12 5 5 190 50
xining xian 0 10000 10000 10000 10000 10000 10000 10000 10000 10000 <表示 xining 与 xian 两城市间无直达 <直接相连)路线) B. 求最优路径地算法
求最优路径地算法可以说是本程序地核心
.本程序使用地是弗洛伊德 <floyd )算法
1 、弗洛伊德算法地基本思想
设求顶点vi到vj间地最短路径,若vi到vj有弧,则弧上地权值是一条路径,但未必是最短路径,要经过n-1次 测试.首先将顶点vi加入,即看(vi,v1>,(v1,vj>是否有路径,且比(vi,vj>低,如是,则用后两段路径代替,并称这是 vi到vj中间顶点序号不大于 1地最短路径.再将顶点v2加入,得到vi到vj中间顶点序号不大于 2地最短路 径.如此下去,直到vn加入,得到vi到vj中间顶点序号不大于 n地最短路径,算法结束.
2、弗洛伊德 <floyd )算法清单略述
void ShortestPath_FLOYD(MGraph G,PathMatrix &P[],DistanceMatrix &D> {for (v=0 。 v
数据结构课程设计-全国交通咨询模拟系统程序设计源代码



