数据结构实验报告-交通指南
- 格式:doc
- 大小:73.50 KB
- 文档页数:6
数据结构—交通系统在我们的日常生活中,交通系统是一个极其复杂但又至关重要的组成部分。
它就像是一个庞大的、不断运转的机器,将人们从一个地方运输到另一个地方,保障着城市和社会的正常运转。
而在这个复杂的系统背后,数据结构起着不可或缺的作用。
想象一下,每天有成千上万的车辆在道路上行驶,有无数的行人穿梭于街头巷尾,还有各种公共交通工具在城市中穿梭。
如何有效地管理和协调这一切,以确保交通的流畅、安全和高效?这就需要依靠数据结构来实现。
首先,让我们来谈谈交通流量数据。
这是交通系统中最基本也是最重要的数据之一。
通过在道路上设置传感器、摄像头等设备,我们可以实时收集到车辆的数量、速度、行驶方向等信息。
这些数据被整理和存储起来,形成了一个庞大的数据库。
而这个数据库的组织方式,就是一种数据结构。
比如说,我们可以使用链表来存储交通流量数据。
链表的特点是可以方便地进行插入和删除操作,这对于实时更新交通流量信息非常有用。
每当有新的数据产生,我们可以迅速地将其添加到链表中;而当某些数据过时或者不再需要时,也可以轻松地将其从链表中删除。
另外,队列这种数据结构在交通系统中也有广泛的应用。
比如在十字路口的信号灯控制中,车辆可以被看作是在一个队列中等待通行。
信号灯按照一定的规则依次放行队列中的车辆,从而保证交通的有序进行。
队列的先进先出原则很好地模拟了这种场景,使得交通控制更加合理和高效。
除了交通流量数据,路线规划也是交通系统中的一个重要环节。
当我们使用导航软件规划出行路线时,背后其实是一系列复杂的数据结构和算法在起作用。
例如,图这种数据结构被广泛应用于路线规划中。
我们可以将城市的道路网络看作是一个图,其中节点代表道路的交叉点,边代表道路段。
通过对这个图进行搜索和分析,导航软件可以找到从起点到终点的最优路径。
在图的搜索算法中,迪杰斯特拉算法是一种常用的方法。
它能够计算出图中一个节点到其他所有节点的最短路径。
当我们输入起点和终点后,导航软件就会运用这种算法,在道路网络的图中找到最短或者最快的路线,为我们提供准确的导航指引。
数据结构课程设计报告题目:《旅游交通查询系统》采用的方法:邻接矩阵、Dijkstra、文件操作班级:姓名:指导教师:成绩:信息工程学院XX年XX月XX日目录一、问题描述 (2)1.1问题描述: (2)1.2基本要求: (2)二、需求分析 (2)2.1 项目需求 (2)2.2项目业务要求 (3)三、概要设计 (3)3.1概要设计思想 (3)3.2所有声明的所有抽象数据类型 (3)3.3 各层次之间的关系 (4)四、详细设计 (5)4.1 流程图 (5)4.2本系统的模块 (5)4.2各模块的设计 (6)五、调试分析 (17)5.1遇到的问题 (17)5.2解决方法 (17)5.3算法的时间复杂度 (17)六、测试结果 (17)七、经验和体会 (22)八、参考文献 (23)九、源代码 (23)一、问题描述1.1问题描述:处于对不同目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
1.2基本要求:实现功能:火车信息查询、最短路径查询、火车信息编辑、读入修改信息、查看火车信息、查看城市信息。
每个功能中又有一些小功能,如火车信息查询中有:按车次查询、按出发地与目的地查询(其中又有最快、最省钱、全部选择)中转站查询、查看火车信息,火车信息编辑又包括:添加火车信息、删除火车信息、查看火车信息、保存火车信息功能。
二、需求分析2.1 项目需求1、设计最短路径的算法及其需要信息的存储:本设计中最短路径的算法利用迪杰斯特拉算法,存储方法利用邻接矩阵存储。
2、该程序所做的工作的是模拟旅游交通查询,为旅客提供种最优决策的交通查询。
此程序规定:在程序中输入城市名称时,需输入15个字符以内的字母串;输入列车编号时需输入一个字符串类型;输入列车的费用时需输入一个实型数据;输入列车开始时间和到达时间时均需输入一个整型数据,在选择功能时,应输入与所选功能对应的一个整型数据。
基于大数据分析的智慧交通规划实验报告一、引言随着城市化进程的加速和人口的增长,交通拥堵成为了困扰城市发展的重要问题。
为了提高交通效率、改善出行体验,智慧交通规划应运而生。
本实验旨在通过大数据分析,深入挖掘交通数据中的潜在规律和趋势,为智慧交通规划提供科学依据和决策支持。
二、实验目的1、探索大数据在智慧交通规划中的应用方法和效果。
2、分析交通流量、出行模式等数据,为交通设施规划和交通管理策略制定提供参考。
3、评估不同交通规划方案对交通运行状况的影响,优化交通资源配置。
三、实验数据来源1、交通流量监测数据:包括城市道路卡口、高速公路收费站等采集的车辆通行数据。
2、公交地铁刷卡数据:记录了市民乘坐公共交通工具的出行轨迹。
3、出租车 GPS 数据:反映出租车的行驶路线和载客情况。
4、手机信令数据:通过分析手机用户在不同基站之间的切换,获取人员的移动信息。
四、实验方法与步骤1、数据预处理对原始数据进行清洗,去除重复、错误和异常值。
将不同来源的数据进行整合和关联,建立统一的数据格式。
2、数据分析运用统计分析方法,计算交通流量的均值、峰值、分布等特征。
利用聚类分析,对出行模式进行分类,如通勤出行、休闲出行等。
通过关联分析,挖掘交通流量与时间、空间、天气等因素的关系。
3、交通模型构建基于历史数据,构建交通仿真模型,预测未来交通流量和拥堵情况。
采用多智能体模型,模拟交通参与者的行为和决策过程。
4、交通规划方案制定与评估根据数据分析结果和模型预测,提出多种交通规划方案,如新增道路、优化公交线路、设置智能交通信号等。
利用交通仿真模型对各方案进行评估,比较不同方案下的交通运行指标,如平均车速、拥堵时长等。
五、实验结果与分析1、交通流量特征分析交通流量呈现明显的时空分布规律,工作日早晚高峰时段道路拥堵严重,城市中心区域流量较大。
节假日期间,旅游景点周边道路流量显著增加。
2、出行模式分析通勤出行主要集中在特定的时间段和路线上,形成明显的潮汐现象。
一、实验目的本次实验旨在通过实际操作和数据分析,加深对交通信息处理技术的理解,掌握交通信息系统的基本原理和操作方法。
通过实验,我们将学习如何收集、处理和分析交通数据,以及如何利用这些数据来优化交通管理。
二、实验时间2023年11月15日三、实验地点XX市交通信息管理中心四、实验内容1. 交通信息数据收集- 使用交通流量监测设备,收集主要道路的实时交通流量数据。
- 通过视频监控设备,收集特定时段的交通状况,包括车辆行驶速度、密度和流量。
2. 交通信息数据处理- 使用交通信息处理软件,对收集到的数据进行清洗和预处理,包括剔除异常值、填补缺失值等。
- 对处理后的数据进行统计分析,计算交通流量、速度、密度等关键指标。
3. 交通信息可视化- 利用可视化工具,将处理后的交通信息以图表形式展示,包括交通流量热力图、速度分布图等。
- 分析交通流量分布规律,识别拥堵路段和高峰时段。
4. 交通信息分析- 结合历史数据和实时数据,分析交通流量变化趋势,预测未来交通状况。
- 分析不同路段、不同时段的交通流量变化,为交通管理提供决策依据。
五、实验过程及结果1. 数据收集实验期间,共收集了XX市主要道路的实时交通流量数据,以及特定时段的交通状况视频。
2. 数据处理使用交通信息处理软件,对收集到的数据进行清洗和预处理,剔除异常值,填补缺失值。
经过处理,数据质量得到提高。
3. 数据可视化利用可视化工具,将处理后的交通信息以图表形式展示。
结果显示,XX市主要道路交通流量在高峰时段明显增加,拥堵路段主要集中在市中心区域。
4. 数据分析通过对交通流量的统计分析,发现XX市主要道路交通流量呈现以下特点:- 上午7:00-9:00,下午5:00-7:00为高峰时段,交通流量较大。
- 市中心区域交通流量明显高于其他区域。
- 部分路段存在交通拥堵现象,建议采取相应措施缓解交通压力。
六、实验结论通过本次实验,我们掌握了交通信息处理技术的基本原理和操作方法。
数据结构—交通系统数据结构—交通系统1:引言交通系统是一个城市或地区顺畅运行的重要组成部分。
为了有效管理和优化交通流量,需要设计和实现一个高效的交通系统。
本文档将介绍一个基于数据结构的交通系统设计。
2:整体架构交通系统可以分为以下几个模块:2.1 路网管理模块该模块负责管理整个路网的基础数据,包括道路、交叉口、车道、信号灯等信息。
2.2 路况监测模块该模块通过传感器和摄像头等设备对交通路况进行实时监测,并将数据反馈给系统。
2.3 路径规划模块该模块根据用户的起点和终点,利用路网数据和实时路况信息,计算出最优路径。
2.4 交通管理模块该模块根据实时路况和路径规划结果,控制信号灯、调整车道使用情况,以优化交通流量。
3:路网管理模块3.1 道路管理道路包括道路名称、起点和终点位置、道路长度等属性。
可以使用线性表或图来表示道路之间的连接关系。
3.2 交叉口管理交叉口是道路交汇的地方,包括交叉口名称、交叉口坐标、交通灯状态等属性。
可以使用树来表示交叉口的层级关系。
3.3 车道管理车道是道路上划分出的车辆行驶通道,包括车道编号、车道容量、车道速度限制等属性。
可以使用链表或数组来表示车道之间的关系。
4:路况监测模块4.1 传感器数据采集通过部署传感器设备,采集道路状况、车辆数量等数据。
可以使用数组或链表来存储和管理传感器数据。
4.2 图像识别技术利用摄像头采集交通图片,并通过图像识别技术分析车辆数量、车辆类型等信息。
可以使用图像处理算法来实现图像识别功能。
5:路径规划模块5.1 起点和终点选择用户选择起点和终点,并提供其他限制条件,例如出行时间、交通工具等。
5.2 最短路径算法利用最短路径算法,通过路网数据和实时路况信息,计算出起点到终点的最优路径。
可以使用Dijkstra算法、A算法等来实现最短路径计算。
6:交通管理模块6.1 信号灯控制根据交通流量和道路状况,动态调整信号灯的时间间隔,以控制交通流量。
6.2 车道使用管理根据车流量和道路容量,动态调整车道使用情况,例如开放或关闭车道,以优化交通流量。
数据结构课程实验报告班级:计嵌141姓名:陈志远学号:23交通指南系统1.问题描述假设以一个带权有向图表示某一区域的公交线路图,图中顶点代表一些区域中的重要站点,弧代表已有的公交线路,弧上的权表示该线路上的票价(或搭乘所需时间),试设计一个交通指南系统,指导前来咨询者以最低的票价或最少的时间从区域中的某一站点到达另一站点。
2.基本要求(1)设计结点和图的存储结构;(2)设计任意两点最短路径方法;(3)输入:图的相关信息以建立公交线路网,以及公交线路网咨询的任意两个站点;(4)输出:两个站点间一条最短的简单路径。
3.实现提示(1)结点和图的存储结构typedef struct node{ int no;float wgt;struct node*next;}edgenode;typedef struct{ char vtx;edgenode*link;} vexnode;typedef vexnode Graph[n];void Floyd(Graph G,float A[n][n],int p[n][n]){ int i,j,k;for(i=0;i<n;i++)fot(j=0;j<n;j++){ A[i][j]=G[i][j];P[i][j]=-1;}for(k=0;k<n;k++)for(i=0;i<n;i++)for(j=0;j<n;j++)if(A[i][k]+A[k][j]<A[i][j]){ p[i][j]=k;A[i][j]=A[i][k]+A[k][j];}}(2)算法提示采用任意两点最短路径的相关算法。
4.源代码#include <iostream>using namespace std;struct ArcCell{int adj; dj = 0;else[i][j].adj = 20000; nfo = false;}}for(i = 0;i<;i++) dj = w; nfo){delete [][i][j].info;[i][j].info = false;}}= 0;= 0;}int MGraph::LocateVex(char u){for(int i = 0 ;i<20;i++){if(u == [i]){return i;}}return -1;}void MGraph::ShortestPath_FLOYD(Path &P,Distanc &D)dj;// 顶点v到顶点w的直接距离for(u = 0;u<;u++)P[v][w][u] = false; //路径矩阵初值if(D[v][w]<20000) //从v到w有直接路径P[v][w][v] = P[v][w][w] = true;//由v到w的路径经过v和w两点}}for(u = 0;u<;u++){for(v = 0;v<;v++){for(w = 0;w<;w++){if(D[v][u]+D[u][w]<D[v][w])//从v经u到w的一条路径更短{D[v][w] = D[v][u]+D[u][w];// 更新最短距离for(i = 0;i<;i++)P[v][w][i] = P[v][u][i]||P[u][w][i];//从v到w 的路径经过从v到u和从u到w的所有路径}}}}}void main(){MGraph g;Path p; // 3维数组Distanc d; // 2维数组int s,t,k;char v1,v2;float sum=0;cout<<"\n***************欢迎使用交通指南系统**************\n"<<endl;();cout<<"\n请依次输入您的出发站和目的站站点名称:";cin>>v1>>v2;s= (v1);t= (v2);(p,d);if(s!=t){int a=s;cout<<"\n由站点"<<"到站点"<<"途中经过站点:";for(k = 0;k< if(p[s][t][k] == 1){ cout<<" ";sum=sum+ a=k;}}cout<<"最短时间:"<<sum<<"分钟";cout<<"\n\n***************感谢您的使用!*****************"<<endl;cout<<"\n\n***************祝您旅途愉快!*****************"<<endl;();}5.实现。
第1篇一、实验背景与目的随着我国经济的快速发展,城市化进程不断加快,交通问题日益凸显。
为了提高城市交通系统的运行效率,减少交通拥堵,提升居民出行体验,本次实验旨在通过模拟交通规划,熟悉并掌握交通规划的基本原理和方法,为实际城市规划提供参考。
二、实验内容与方法本次实验采用模拟软件进行,主要包括以下内容:1. 基础数据收集与分析:收集城市人口、用地、交通设施等基础数据,并进行统计分析,为交通规划提供依据。
2. 交通需求预测:根据人口、用地、出行需求等因素,预测未来城市交通需求,为交通规划提供目标。
3. 交通系统规划:结合交通需求预测,规划道路网络、公共交通系统、交通设施等,以提高交通系统运行效率。
4. 交通拥堵治理:针对交通拥堵问题,提出治理措施,如优化交通信号灯控制、增设公共交通线路等。
5. 交通规划方案评估:对多个交通规划方案进行评估,选择最优方案。
实验方法主要包括以下几种:1. 数据分析方法:运用统计学、运筹学等方法对基础数据进行处理和分析。
2. 交通模型方法:运用交通模型进行交通需求预测和交通系统规划。
3. 仿真模拟方法:运用仿真软件模拟交通系统运行,评估规划方案效果。
三、实验结果与分析1. 基础数据分析:通过对城市人口、用地、交通设施等数据的分析,发现城市交通拥堵主要集中在市中心区域,且高峰时段交通流量较大。
2. 交通需求预测:预测结果显示,未来城市交通需求将持续增长,特别是在高峰时段。
3. 交通系统规划:根据交通需求预测,规划了道路网络、公共交通系统、交通设施等,包括新建道路、优化交通信号灯控制、增设公共交通线路等。
4. 交通拥堵治理:针对交通拥堵问题,提出以下治理措施:- 优化交通信号灯控制:通过调整信号灯配时,提高道路通行效率。
- 增设公共交通线路:提高公共交通服务水平,引导居民出行。
- 推广绿色出行:鼓励步行、骑行等绿色出行方式,减少机动车辆出行。
5. 交通规划方案评估:通过仿真模拟,评估了多个交通规划方案的效果,发现方案一在提高交通系统运行效率、减少交通拥堵方面效果最佳。
全国交通咨询模拟一、设计目的掌握线性表、栈、图结构和对文件的操作,学习屏幕编辑和菜单技术,掌握用最短路径及其搜索算法编制较综合性的程序,能用图的邻接存储结构求解最优路线问题,解决有关实际问题。
得到软件设计技能的训练.二、问题描述交通咨询模拟。
根据旅客的不同需要,要考虑到旅客希望在旅途中的时间尽可能短、希望旅费尽可能省等的要求。
三、基本要求1、对城市信息(城市名、城市间的里程)进行编辑:具备添加、修改、删除功能;2、对城市间的交通工具:火车。
对列车时刻表进行编辑:里程、和列车班次的添加、修改、删除;3、提供两种最优决策:最快到达或最省钱到达。
全程只考虑一种交通工具,可以不考虑回程;4、咨询以用户和计算机对话方式进行,要注意人机交互的屏幕界面。
由用户选择最优决策原则和交通工具,输入起始站、终点站、出发时间,输出信息:最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间,并详细说明依次于何时何地乘坐哪一趟列车何时到达何地。
四、具体实现1、思路(1) 数据存储。
城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件.在实验中本想用文本储存数据,但操作不熟悉,而是改用图的邻接矩阵储存原始信息,而后用数组进行添加删改(2) 数据的逻辑结构。
根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为无向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的时间)或旅费。
(3)数据的存储结构。
采用邻接表和邻接矩阵都可作为数据的存储结构,这里建议采用邻接矩阵作为数据的存储结构.(4) 用不同的功能模块对城市信息和交通信息进行编辑。
添加、修改、删除功能可用菜单方式或命令提示方式。
只要能方便的对城市信息和交通信息进行管理即可,但要注意人机界面,具体实现由学生自行设计,也可参考有关程序(届时在网上提供)。
这些工作有不小的工作量.(5) 最优决策功能模块① 读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名及对方城市到达该元素所代表城市的所有信息;表头数组中的元素所对应的单链表存放与该元素所代表的城市有交通联系的城市(代码、里程、列车车次)。
课程设计报告题目:武昌地区公交查询与换乘推荐课程名称:数据结构课程设计专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院任务书设计内容掌握图、查找、排序等数据结构的物理存储结构与基本算法,通过解决较复杂的基于图模型的实际问题,提高学生对数据结构知识综合运用的技能与实践能力。
设计要求(1)从互联网或相关资料获取可靠的武汉公交线路及其地理数据,通过线性结构与图模型对其进行表示,且以文件保存。
(2)图形方式显示上述图模型与求解结果。
(3)界面友好,实现的功能包括:录入与修改公交线路信息;查询所有线路信息(线路名号、起点、终点、首末车时间、票价规则),按线路名或起点站名排序;查询指定线路的详情(沿途站点、首末车时间、票价规则、站间距离等);查询某一位置途经的所有公交线路、指定起点与终点,推荐乘车方案(如要求换乘次数最少、路线最短或无要求条件等)。
参考文献[1] 严蔚敏, 吴伟民. 数据结构(C语言版). 北京: 清华大学出版社,1997[2] 严蔚敏, 吴伟民, 米宁. 数据结构题集(C语言版). 北京: 清华大学出版社,1999[3] 博客园,华山大师兄的博客,最短路径——Dijkstra算法和Floyd算法/biyeymyhjob/archive/2012/07/31/2615833.html#33 39167目录1 引言 (4)1.1 课题背景与意义 (4)1.1.1 公交出行 (4)1.2国内外研究现状 (4)1.3课程设计的主要研究工作 (4)2 系统需求分析与总体设计 (7)2.1系统需求分析 (7)2.2 系统总体设计 (7)3 系统详细设计 (8)3.1有关数据结构的定义 (8)3.2 主要算法设计 (9)4 系统实现与测试 (14)4.1 系统实现 (14)4.2 系统测试 (15)5 总结与展望 (21)5.1 全文总结 (21)5.1 工作展望 (22)6. 附录 (22)1 引言1.1课题背景与意义1.1.1 公交出行公交出行是现在城市生活中必不可少的一种出行方式。
管理学院09电商专业 1 班学号3109004338 姓名姚礼华协作者____无______ 教师评定_________________ 实验题目区域交通指南图综合实验评分表实验报告一、实验目的与要求1、实现图的邻接矩阵、邻接表存储结构;2、掌握有向网最短路径求解的迪杰斯特拉算法和佛洛依德算法;二、实验内容查找路径的系统需要有以下几个功能:1.要有数据输入的功能2.当数据输入错误时要有方法重新输入本条数据3.要有反复查找路径的功能4.路径的输出要有路程和从起点到终点所要经过的顶点存储结构的设计:1.在数据输入方面我使用的有结构体,图2.在数据输出方面我使用的有栈源程序:(其中有一些代码是用作查看使用)#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<conio.h>#define MAXV 100typedef struct {char vexs[MAXV];int edges[MAXV][MAXV];int n,e;}MGraph;//栈开始#define MAX 100typedef int datatype;typedef struct {datatype data[MAX];int top;}seqstack;seqstack *s;seqstack *createemptystacks(){seqstack *s;s=(seqstack *)malloc(sizeof(seqstack)); s->top=0;return s;}int stackemptys(seqstack *s){return(s->top==0);}int stackfulls(seqstack *s){return s->top==MAX;} void pushs(seqstack *s,datatype x){if(stackfulls(s))printf("overflow\n");else{s->data[s->top++]=x;}}void pops(seqstack *s){if(stackemptys(s))printf("underflow\n");else s->top--;}datatype gettops(seqstack *s){return s->data[s->top-1];}//栈结束MGraph *creategraph(MGraph *g){int i,j,k;g=(MGraph *)malloc(sizeof(MGraph));printf("结点数:");scanf("%d",&g->n);printf("边数(为结点数的二次方减去结点数):"); scanf("%d",&g->e);printf("\n");for(j=0;j<g->n;j++){printf("行列号为%d的结点的值(可以是字符):",j);scanf("%s",&g->vexs[j]);}printf("\n");for(i=0;i<g->n;i++) //初始化矩阵{ for(j=0;j<g->n;j++){g->edges[i][j]=0;/*printf(" %d ",g->edges[i][j]);*/}/*printf("\n");*/}printf("相连的两个顶点(行或列有输错,请在权值上输入大于10000 ,重新输入)\n");printf("如果结点之间不相连,输入权值为1000 \n");for(k=0;k<g->e;k++) //输入边的值{printf("输入行的序列:");scanf("%d",&i);printf("输入列的序列:");scanf("%d",&j);if(i<g->n&&j<g->n){printf("边的权值:");scanf("%d",&g->edges[i][j]);if(g->edges[i][j]>1000){printf("权值出错,重新输入(enter键继续)。
数据结构课程实验报告班级:计嵌141姓名:陈志远学号:1413052023交通指南系统1.问题描述假设以一个带权有向图表示某一区域得公交线路图,图中顶点代表一些区域中得重要站点,弧代表已有得公交线路,弧上得权表示该线路上得票价(或搭乘所需时间),试设计一个交通指南系统,指导前来咨询者以最低得票价或最少得时间从区域中得某一站点到达另一站点。
2.基本要求(1)设计结点与图得存储结构;(2)设计任意两点最短路径方法;(3)输入:图得相关信息以建立公交线路网,以及公交线路网咨询得任意两个站点;(4)输出:两个站点间一条最短得简单路径。
3.实现提示(1)结点与图得存储结构typedef struct node{ int no;float wgt;struct node*next;}edgenode;typedef struct{ char vtx;edgenode*link;} vexnode;typedef vexnode Graph[n];void Floyd(Graph G,float A[n][n],int p[n][n]){ int i,j,k;for(i=0;i<n;i++)fot(j=0;j<n;j++){ A[i][j]=G[i][j];P[i][j]=-1;}for(k=0;k<n;k++)for(i=0;i<n;i++)for(j=0;j<n;j++)if(A[i][k]+A[k][j]<A[i][j]){ p[i][j]=k;A[i][j]=A[i][k]+A[k][j];}}(2)算法提示采用任意两点最短路径得相关算法。
4、源代码#include <iostream>using namespace std;struct ArcCell{int adj; //存放弧长bool *info; //就是否用过该弧};struct _MGraph{char vexs[20]; //存放站点ArcCell arcs[20][20]; //<i,j>int vexnum;int arcnum;};typedef int Path[20][20][20];typedef int Distanc[20][20];class MGraph //没用私有成员{public:_MGraph mgraph;//void DestroyGraph(); //析构函数销毁图int LocateVex (char u); // 返回顶点在图中得位置bool CreateDN(); //构造有向网void ShortestPath_FLOYD(Path &P,Distanc &D);};bool MGraph::CreateDN()//构造有向网{int i,j ,w;char v1, v2;cout<<"请输入站点个数,直接可达线路得条数: ";cin>>mgraph、vexnum>>mgraph、arcnum ;cout<<"\n请输入各站点名: ";for(i = 0;i<mgraph、vexnum;i++)//构造顶点向量{cin>>mgraph、vexs[i];}for(i = 0;i<mgraph、vexnum;i++) //初始化邻接矩阵{for(j = 0;j<mgraph、vexnum;j++){if(i==j)mgraph、arcs[i][j]、adj = 0;elsemgraph、arcs[i][j]、adj = 20000; //infinity;mgraph、arcs[i][j]、info = false;}}for(i = 0;i<mgraph、arcnum;i++) //构造邻接矩阵{cout<<"\n请输入其中一条线路得起点站点名,终点站点名,需要时间(分钟): ";cin>>v1>>v2>>w;int m = LocateVex(v1);int n = LocateVex(v2);mgraph、arcs[m][n]、adj = w; // <v1, v2>得权值}return true;}void MGraph::DestroyGraph(){for(int i = 0 ;i<mgraph、vexnum;i++)for(int j = 0;j<mgraph、vexnum;j++){if(mgraph、arcs[i][j]、info){delete []mgraph、arcs[i][j]、info;mgraph、arcs[i][j]、info = false;}}mgraph、vexnum = 0;mgraph、arcnum = 0;}int MGraph::LocateVex(char u){for(int i = 0 ;i<20;i++){if(u == mgraph、vexs[i]){return i;}}return -1;}void MGraph::ShortestPath_FLOYD(Path &P,Distanc &D)//求每对顶点间得最短路径// 用Floyd算法求有向网G中各对顶点v与w之间得最短路径P[v][w]及其带权长度D[v][w]// 若P[v][w][u]为TRUE,则u就是从v到w当前求得最短路径上得顶点。
{int u,v,w,i;for(v = 0;v<mgraph、vexnum;v++){for(w = 0;w<mgraph、vexnum;w++){D[v][w] = mgraph、arcs[v][w]、adj;// 顶点v到顶点w得直接距离for(u = 0;u<mgraph、vexnum;u++)P[v][w][u] = false; //路径矩阵初值if(D[v][w]<20000) //从v到w有直接路径P[v][w][v] = P[v][w][w] = true;//由v到w得路径经过v与w两点}}for(u = 0;u<mgraph、vexnum;u++){for(v = 0;v<mgraph、vexnum;v++){for(w = 0;w<mgraph、vexnum;w++){if(D[v][u]+D[u][w]<D[v][w])//从v经u到w得一条路径更短{D[v][w] = D[v][u]+D[u][w];// 更新最短距离for(i = 0;i<mgraph、vexnum;i++)P[v][w][i] = P[v][u][i]||P[u][w][i];//从v到w得路径经过从v到u与从u到w得所有路径}}}}}void main(){MGraph g;Path p; // 3维数组Distanc d; // 2维数组int s,t,k;char v1,v2;float sum=0;cout<<"\n***************欢迎使用交通指南系统**************\n"<<endl;g、CreateDN();cout<<"\n请依次输入您得出发站与目得站站点名称:";cin>>v1>>v2;s=g、LocateVex (v1);t=g、LocateVex (v2);g、ShortestPath_FLOYD(p,d);if(s!=t){int a=s;cout<<"\n由站点"<<g、mgraph、vexs[s]<<"到站点"<<g、mgraph、vexs[t]<<"途中经过站点:";for(k = 0;k<g、mgraph、vexnum;k++)if(p[s][t][k] == 1){ cout<<g、mgraph、vexs[k]<<" ";sum=sum+g、mgraph、arcs[a][k]、adj;a=k;}}cout<<"最短时间:"<<sum<<"分钟";cout<<"\n\n***************感谢您得使用!*****************"<<endl;cout<<"\n\n***************祝您旅途愉快!*****************"<<endl;g、DestroyGraph();}5.实现。