交通咨询系统设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

重庆科技学院

《数据结构》课程设计

报告

学院:_电气与信息工程学院_ 专业班级: 计科2

学生姓名: 学号:

设计地点(单位)__ _ 计算机基础自主学习中心__ _ _

设计题目:________ 交通咨询系统设计__ ___ _ _

完成日期:2012年7 月6 日

指导教师评语: ______________________ _________________

________________________________________________________________________________________________ ________________________________________________________________________________________________

_________ __________ _

成绩(五级记分制):______ __________

指导教师(签字):________ ________

重庆科技学院

课程设计任务书

设计题目:交通咨询系统的设计

系主任:雷亮指导教师:黄永文/王双明/熊茜/彭军/王成敏

2012年6月20日

摘要

在交通网络非常发达,人们在出差、旅游出行时,往往关心节省交通费用或节省所需要的时间等问题。对于这样一个人们关心的问题,可以用一个图结构来表示交通网络,利用计算机建立一个交通咨询系统。图中顶点表示城市,边表示城市之间的交通情况,其权值可代表里程、交通费用或时间。比如任意一个城市到其他城市的最短路径,任意两个城市之间的最短路径问题。

本次设计的交通咨询系统主要是运用C语言的数据结构来完成交通图的存储、图中顶点的单源最短路径和任意一对顶点间的最短路径问题。

关键词:数字结构C语言交通咨询最短路径

目录

1 设计内容和要求 (1)

1.1 问题描述 (1)

1.2需求分析 (1)

2 课程需求分析 (2)

2.1 算法思路 (2)

2.2 数据结构体 (2)

2.3 基本操作 (4)

2.4 算法应用 (4)

2.5 程序设计流程图 (5)

3 功能模块详细设计 (6)

3.1 测试数据 (6)

3.2 程序调试 (7)

4 课程总结与体会 (24)

5参考文献 (26)

6 致谢 (27)

1 设计内容和要求

1.1 问题描述:

设计、实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方

案:(1)时间最短(2)费用最小(3)里程最少。

1.2需求分析:

该程序所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交

通咨询。此程序规定:

(1)在程序中输入城市名称时,需输入20个字符以内的字符串;输入费用时需输入一个实型数据;输入时间时需输入一个整型数据;在选择功能时,应输入与所选功能对应的一个整型数据。

(2)程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少

旅费才能到达,或两城市间需要走过的最短路程,并详细说明如何坐车才能最省。

(3)程序的功能包括:提供对城市信息的编辑,对两城市间时间、花费、还有路程的编辑,提供三种最优决策:最快到达、最省钱到达、最少路程到达。

2 课程需求分析

2.1 算法思路

(1) 数据存储。城市信息、交通信息(城市间的里程、旅费和时间)存储于磁盘文

件。建议把城市信息、交通信息还有城市和交通信息数目分开存于三个文件中,用fread和fwrite函数操作。

(2) 数据的逻辑结构。根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间、旅费、里程。

(3) 数据的存储结构。采用邻接矩阵作为数据的存储结构,提高空间的存储效率。

(4) 用不同的功能模块对城市信息和交通信息进行编辑,可用菜单方式或命令提示方式。只要能方便的对城市信息和交通信息进行管理即可。

(6) 主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,

要求在程序运行过程中可以反复操作。

2.2 数据结构体

typedef struct lu /* 交通信息数据类型*/

{

int distance; /*城市间里程*/

int cost; /*城市间旅费*/

int time; /*城市间时间*/

}lu,lujin[max][max];

typedef struct city /*城市数据类型*/ {

char name[20];/*城市名称*/

}citys[max];

typedef struct /*网络图的数据类型*/ {

citys clist; /*城市信息*/

lujin arcs; /*边的信息*/

int c_n,l_n; /*边和顶点数目*/

}Graph;

typedef struct /*最短路径*/

{

char adjvex;

int mincost;/*最少旅费*/

int mindistance;/*最短里程*/

int mintime;/*最少时间*/

}closedge;

2.3 基本操作

void zairu(Graph *G);/*导入文件中的信息,能否是程序运行*/

void Administer(Graph G);/*管理员操作界面,由主函数调用*/

void show(Graph G);/*显示系统中的全部城市信息和交通信息*/

int insertcity(Graph *G); /*增加城市信息*/

int insertlu(Graph *G); /*增加交通信息*/

int Located(Graph *G, char *p);/* 返回邻接矩阵的位置下标,系统中的关键*/ void baocun(Graph G);/*将城市信息、交通信息保存在文件中*/

int serchlu(Graph *G);/*搜索交通信息*/

void mindistance(Graph *G, int v0, int v1);/*最少里程计算,迪杰斯特拉算法*/ void mincost(Graph *G, int v0, int v1);/*最少旅费计算,迪杰斯特拉算法*/

void mintime(Graph *G, int v0, int v1);/*最少时间计算,迪杰斯特拉算法*/ 2.4 算法应用

在判断源点到其余各点的最短路径时运用迪杰斯特拉算法:

一般情况下,假设S为以求得最短路径的终点的集合,则可证明:下一条最短路径(设其终点为x)或者是弧(v,k),或者是中奖只经过S中的顶点而最后到达顶点x的路径。这可用反证法来证明,假设此路径上有一个顶点不在S中,则说明存在一条终点不在S而长度比此路径短的路径。但是,这是不可能的。因为我们是按照路径长度递增的次序来产生各最短路径的,故长度比此路径段的所有路径均已产生,它们的终点必定在S中,即假设不成立。

因此,在一般情况下,下一条长度次短的最短路径的长度必是

相关文档
最新文档