数据结构-图-公交线路查询

合集下载

公交系统(附源代码)

公交系统(附源代码)

《公交车查询系统》一、概述1、项目背景(1)我国城市公交查询系统的现状我国城市公交查询系统的发展处于一个落后的水平,广大乘客可以获得信息的方式很少,公交信息的完整性和准确性得不到保证,而且还没有专门的机构负责信息的发布和管理。

我国公交查询系统的现状特点如下:①乘客可以获得的公交信息很少,而且方式主要是常规手段。

我国乘客一般获得公交信息的方式局限于电话,交通图,向熟人问讯等常规方式。

乘客可以获得的公交信息很少,除去线路,站点等基本信息以外,有关班次,车辆到离站时间的信息基本上没有。

②乘客出行中获得信息困难,基本上没有实时信息。

除去在杭州,上海等少数几个城市,乘客可以通过分布于城市中的若干电子站牌获得一些公交车辆的运营信息以外,在其它城市“出行中”的乘客无法获得任何实时信息。

在我国一些城市中,有不少装饰华美的公交站台,但在这些站台上却找不到实用的城市交通图。

③缺乏专门的交通信息发布管理机构,乘客获得的信息准确性得不到保证。

目前,我国大多数城市对于交通信息的发布没有专门的管理机构和规章制度。

在城市交通信息服务需求小的情况下尚可应付。

但随着城市交通信息服务需求的增长,从事交通信息服务的人员和企业数量的增加,需要有专门的管理机构和制度。

当前的城市交通信息服务存在着混乱和低效的问题,有些甚至是对乘客的误导。

(2)我国城市公交查询系统的需求随着人民生活水平的提高和城市的发展,平常人们出行的次数和范围都在增加,作为城市主动脉的公共交通承担着越来越繁重的运输任务也要与此相对应,公交的线路数量和投入运营的车辆数量也在迅猛增加,公交的服务时间延长,服务范围扩大。

服务质量提高,对人们的吸引力也在增强。

在油价上涨和能源短缺的今天,人们的出行将越来越依赖公共交通。

一般意义上,完整的出行问题是解决出发点到目的地的路径选优问题随着人们活动范围的扩大,乘公交出行往往也不可能一车到达,乘客从某一起点,可能需要一次或多次换乘才能到达目的地。

城市公交车路线查询系统

城市公交车路线查询系统

长沙学院软件工程基础实训II实训题目城市公交查询软件学院计算机工程与应用数学学院专业(班级)姓名学号指导教师起止日期实训任务书课程名称:软件工程基础实训II实训题目:城市公交查询软件已知技术参数和设计要求:1. 问题描述(功能要求):(1)用户管理用户管理模块为用户提供用户信息管理的功能,包括用户注册、用户登陆、用户信息修改、用户密码修改、用户注销等功能。

♦用户注册:用户可以利用此功能完成注册,用户在界面输入注册信息,回车后,软件将注册信息保存到用户信息数据文件中。

♦用户登陆:用户可以利用此功能完成登陆,用户在界面输入登陆信息,回车后,软件验证登录信息,登陆成功后,软件进入主功能选择界面。

♦用户信息修改:用户可以利用此功能完成用户信息修改。

♦用户密码修改:用户可以利用此功能完成密码修改。

♦用户注销:用户可以利用此功能完成用户信息注销,某用户注销后,便不能再次登录。

(2)线路管理线路管理模块为用户提供公交线路数据的管理和维护,包括线路添加、线路修改、线路删除等功能。

♦线路添加:用户可以利用此功能增加一条线路。

♦线路修改:用户可以利用此功能修改一条线路。

♦线路删除:用户可以利用此功能删除一条线路。

(3)站点管理站点管理模块为用户提供公交站点数据的管理和维护,包括站点添加、站点修改、站点删除等功能。

♦站点添加:用户可以利用此功能增加一个站点。

♦站点修改:用户可以利用此功能修改一个站点。

♦站点删除:用户可以利用此功能删除一个站点。

(4)公交查询公交查询模块为用户提供公交信息查询的功能,包括站点查询、线路查询、站站查询、最短距离查询、最少换乘查询等功能。

♦站点查询:用户可以利用此功能查看某个站点所停靠的公交线路。

♦线路查询:用户可以利用此功能查看某条线路所路经的公交站点。

♦站站查询:用户可以利用此功能查询出发地和目的地之间的所有公交乘车方案。

♦最短距离查询:用户可以利用此功能查询出发地和目的地之间最短距离的公交乘车方案。

公交信息查询系统课程设计

公交信息查询系统课程设计

公交信息查询系统课程设计一、课程目标知识目标:1. 让学生理解公交信息查询系统的基本原理和功能。

2. 使学生掌握运用编程语言设计简单的公交信息查询系统。

3. 帮助学生了解数据结构在公交信息查询系统中的应用。

技能目标:1. 培养学生运用所学知识,独立设计并实现一个简单的公交信息查询系统。

2. 提高学生分析问题、解决问题的能力,学会运用编程语言解决生活中的实际问题。

3. 培养学生的团队协作能力,学会在项目中进行有效沟通和分工。

情感态度价值观目标:1. 培养学生关注社会热点问题,关心公共交通事业发展。

2. 引导学生树立环保意识,倡导绿色出行。

3. 培养学生勇于尝试、不断探索的精神,增强自信心。

课程性质:本课程为信息技术学科课程,结合编程语言、数据结构等知识,以项目为导向,培养学生实际操作能力和团队协作能力。

学生特点:六年级学生,已具备一定的信息技术基础,对编程有一定了解,好奇心强,善于合作。

教学要求:结合学生特点,注重理论与实践相结合,关注学生个体差异,提高学生的实践操作能力和创新能力。

在教学过程中,注重引导学生关注社会问题,培养其社会责任感。

通过本课程的学习,使学生能够将所学知识应用于实际生活,提高解决问题的能力。

二、教学内容1. 理论知识:- 计算机编程基础:变量、数据类型、控制结构等。

- 数据结构:数组、链表、树等在公交信息查询系统中的应用。

- 算法:排序、查找等算法在公交信息查询系统中的运用。

2. 实践操作:- 利用编程语言(如Python)设计并实现一个简单的公交信息查询系统。

- 分析并解决实际项目中遇到的问题,如数据存储、查询优化等。

3. 教学大纲:- 第一周:介绍公交信息查询系统基本原理,学习编程基础。

- 第二周:学习数据结构,分析公交信息查询系统中可能用到的数据结构。

- 第三周:学习算法,探讨如何优化公交信息查询系统。

- 第四周:实践操作,分组进行项目开发,设计并实现公交信息查询系统。

公交查询系统

公交查询系统

南京航空航天大学计算机实践实验报告课程名称:软件技术基础专题:学生成绩管理系统学生姓名:孟宁·罗龙城班级学号: 030950111 ·030950120 专业名称:探测制导与控制2011年11月一`引言1.1编写目的在当今社会中,交通问题已经成为很重要的社会性问题,而公交成为解决交通问题的一个关键因素。

大力发展公共交通是解决城市交通拥挤问题的首选措施。

但是一种公交是不能满足所有人的出行需求的,人们可能无法通过乘坐一辆公交车到达目的地,这时候就需要换乘来解决该问题,经调查路程最短和换乘次数是人们最关心的问题。

根据这些问题,需要开发一套公交查询系统,从而方便人们出行前进行查询。

1.2项目背景本系统主要面向广大的城市居民和外来的旅游者,为不同需求的用户提供全面、准确的公交信息。

在该系统中还需要提供多种公交查询方式,并且该系统中要给出管理功能,方便公交发生变化后及时对路线进行调整。

根据需求我们可以将系统分为两大功能模块,分别是前台查询公交模块和后台公交管理模块。

下面分别来看一下两个模块的具体功能。

前台公交查询模块:该模块是被普通用户使用的,其中包括线路查询、站点查询、站站查询等多种核心公交查询功能。

后台公交管理模块:该模块是由系统管理员操作的,包括站点管理和路线管理两大功能。

在站点功能中包括向新线路中添加站点和修改原线路站点的功能。

在线路管理中包括修改线路原有信息的功能,其信息包括起始和结束时间、起始站和终点站等。

开发软件名称:南京市公交线路查询系统项目任务提出者:计算机指导老师储剑波项目开发者:罗龙成孟宁用户:暂无实现软件单位:南京航空航天大学项目与其他软件系统关系:本项目以Microsoft Visual C++为开发环境。

1.3定义(1)数据流图:描绘系统的逻辑模型,图中没有任何具体的物理元素,只是描绘信息在系统中流动和处理的情况,它表示了数据和处理过程的关系。

数据流图有四种基本符号:● 正方形(或立方体)表示数据的源点或终点。

数据库实习实验报告(公交车线路查询系统)

数据库实习实验报告(公交车线路查询系统)

重要代码
场景一: 实现目的
完成【车次查询】核心功能——完成查询,更新视图。
实现效果
代码:
bool MapTableWidget::updateMapTableModel() {
int busID; QString sql; QSqlQuery query(db);
sql = tr("select BID,BEGINTIME,ENDTIME,BTICKETPRICE from ") + prefix + tr("_buses where BNUM like \'") + busNum + tr("\';");
西安邮电学院
数据库编程实习报告
Bus Search 公交车线路查询工具 项目总结
姓名:郭仲杰 学号:04085052 / 18 学院:计算机学院 班级:软件 0802 完成时间:2010/12/29
项目名称
Bus Search 公交线路查询工具
项目描述
“公交线路查询工具”的定位在于解决使用者搭乘公交的麻烦,有效地为用户节约时间,使用户能 够更加有规划地进行事务安排。
return true; }
实验总结
通过这次数据库的课程设计实习,我从中学习到了一个数据库程序的设计的基本步骤,同时加强了 关系型数据库管理方面的部分知识。
在整个程序的设计时,我通过分析学习到了一个数据库程序应该考虑的方面,了解到关系型数据库 关系处理方便的灵活性。同时在数据设计与视图设计的衡量中,让我知道了数据设计的重要性,在一定 的选择判断中,设计出了数据库的整体结构。
需求分析
项目背景
城市的扩张使得公交线路越来越复杂,为了使得用户更加方便地能够获得最新公交线路, “公交线路查询工具”帮助人们解决这个问题。

数据结构课程设计目录及正文

数据结构课程设计目录及正文

数据结构课程设计目录及正文一、课程设计目的数据结构是计算机科学中的一门重要基础课程,通过课程设计,旨在让学生更深入地理解和掌握数据结构的基本概念、原理和算法,并能够将其应用到实际问题的解决中。

培养学生的问题分析能力、算法设计能力、程序编写能力和调试能力,提高学生的综合素质和创新能力。

二、课程设计要求1、学生需独立完成课程设计任务,不得抄袭他人成果。

2、课程设计应具有清晰的结构和良好的可读性,代码规范,注释详细。

3、选择合适的数据结构和算法解决给定的问题,并对算法的时间复杂度和空间复杂度进行分析。

4、完成课程设计报告,包括问题描述、算法设计、程序实现、测试结果和总结等内容。

三、课程设计题目1、图书管理系统实现图书的添加、删除、查询、修改等功能。

按照图书的分类、作者、书名等进行排序和查找。

2、学生成绩管理系统录入学生的成绩信息,包括学号、姓名、课程名称、成绩等。

计算学生的平均成绩、总成绩,并按照成绩进行排序。

3、公交线路查询系统建立公交线路的网络模型。

实现站点之间的最短路径查询和换乘方案查询。

4、停车场管理系统模拟停车场的车辆进出管理。

计算停车费用,显示停车场的当前状态。

四、课程设计目录1、引言2、需求分析问题描述功能需求数据需求性能需求3、总体设计系统架构模块划分数据结构设计4、详细设计模块功能描述算法设计界面设计5、编码实现代码框架关键代码实现6、测试与调试测试用例测试结果调试过程7、总结课程设计的收获遇到的问题及解决方法对数据结构课程的进一步理解8、参考文献9、附录源程序代码五、正文内容(一)引言随着信息技术的不断发展,计算机在各个领域的应用越来越广泛。

数据结构作为计算机科学的重要基础,对于提高程序的效率和质量起着至关重要的作用。

本次课程设计旨在通过实际项目的开发,让学生将所学的数据结构知识运用到实践中,提高解决实际问题的能力。

(二)需求分析1、问题描述以图书管理系统为例,系统需要对图书馆中的图书进行有效的管理,包括图书的基本信息(书名、作者、出版社、出版日期、ISBN 号等)、图书的库存数量、借阅状态等。

公交地铁查询系统报告

公交地铁查询系统报告

《公交地铁查询系统》报告需求分析:系统作为一种是实用工具,为在广州出行旅游的游客、学生群体等提供公交路线、地铁路线查询,具体包括:1、为用户提供经过某个地点附近的公交站点、地铁站点;2、查询经过某个站点的公交路线,公交地铁线路的具体站点信息;3、输入起始公交站点和终止站点,系统搜索可到达的路线;4、可实现鼠标操作;数据结构设计与算法:第一个功能:涉及到地点的查询,主要用到模式匹配,利用模式匹配的对输入地点与系统记录地点进行匹配,同时利用模糊查找的算法,实现了模糊查找功能。

第二个功能:涉及到文件的读取的部分算法以及函数。

第三个功能:利用邻接矩阵的原理,参考了邻接矩阵查找的算法以及大量公交地铁查询算法,设计了一种更为有效的算法。

具体如下:对起始点及终止点经过的路线进行比较,如果有相同路线,则可直接到达。

如没有,则考虑转车,转车时要考虑经过每个站点的路线,如经过站点的路线与终止点相同,则转车成功。

编译环境:CodeBlocks具体实现过程鼠标操作算法核心代码:void mouseCtr(){int *mousePos;while(1){while(1){if(GetKeyState(VK_LBUTTON)<0){//判断鼠标状态mousePos=GetMousePos();//获取鼠标位置if(mousePos[0]>=161&&mousePos[0]<=471)if(mousePos[1]>=111&&mousePos[1]<=142){while(1){//具体位置实现鼠标点击跳转if(GetKeyState(VK_LBUTTON)<0){system("cls");searchStation();}}}else if(mousePos[1]>=143&&mousePos[1]<=174){while(1){if(GetKeyState(VK_LBUTTON)<0){system("cls");searchBus();}}}else if(mousePos[1]>=175&&mousePos[1]<=207){while(1){if(GetKeyState(VK_LBUTTON)<0){system("cls");searchRoute();}}}}}}}void mouseCtr1(int choice){int *mousePos;while(1){while(1){if(GetKeyState(VK_LBUTTON)<0){mousePos=GetMousePos();if(mousePos[0]>=332&&mousePos[0]<=400)if(mousePos[1]>112&&mousePos[1]<144){while(1){if(GetKeyState(VK_LBUTTON)<0){system("cls");switch(choice){//实现界面跳转case 1:searchStation();break;case 2:searchBus();break;case 3:searchRoute();break;}}}}else if (mousePos[1]>145&&mousePos[1]<175){while(1){if(GetKeyState(VK_LBUTTON)<0){printf("\n");switch(choice){case 1:searchStationCtr();break;case 2:searchBusCtr();break;case 3:searchRouteCtr();break;}}}}else if (mousePos[1]>176&&mousePos[1]<208){while(1){if(GetKeyState(VK_LBUTTON)<0){system("cls");main();}}}}}}int* GetMousePos(){int a[2];POINT point;GetCursorPos(&point);a[0]=point.x;a[1]=point.y;//cout<<"X:"<<point.x<<"\tY:"<<point.y<<endl<<endl;return a;};模糊查找核心代码:if(!strcmp(entersite,temp)){flag=0;printf("\n");printf(" %s附近的公交地铁站点有:",entersite);strcpy(filename,entersite);strcat(filename,".txt");if((fp1=fopen(filename,"r"))!=NULL){//printf("文件打开成功!\n");while(!feof(fp1)){//打开源文件c=fgetc(fp1);//每次获取一个字符putchar(c);//输出获取到得字符//fputc(c,fw);//将字符写入到要复制的文件中去}printf("\n\n");fclose(fp1);}//printf(" ---------\n");//printf(" 返回\n ---------\n");//printf(" 继续查询\n ---------");}else if(strstr(temp,fuzzySearch) != NULL){strcat(cache,temp);strcat(cache,"\n\n ");}i=0;}查询转车路线核心代码:for(k=0;k<strlen(temp2);k++){if(temp2[k]!=' '){temp5[m]=temp2[k];m++;}else {temp5[m]='\0';if(!strcmp(temp1,temp5)){printf(" 乘坐%s 可直接到达\n",temp1);flag=1;}for(k=0;k<strlen(temp2);k++){if(temp2[k]!=' '){temp5[m]=temp2[k];m++;}else {temp5[m]='\0';if(!strcmp(temp4,temp5))printf(" 乘坐%s 到%s 转%s 可到达终点站\n",temp1,temp3,temp4);m=0;}程序测试:测试用的数据主要包括:华南农业大学附近的站点,B10公交部分站点的信息,转车测试站点:华农大正门——华工大,华农大正门——天河公园。

公交线路查询系统的数据库设计

公交线路查询系统的数据库设计

公交线路查询系统的数据库设计
随着城市规划建设的持续展开,公交线路发展速度越来越快,城市公交系统规模日益复杂。

由于城市公交数量的增多,进而带来了道路拥堵、环境污染和交通事故频发的问题。

由此,公共交通工具在为城市人们提供便捷交通的同时,也出现了很多严重困扰城市发展的问题。

摘要】随着城市规划建设的发展,城市人口数量的持续激增,城市公交由于其价格低廉、安全稳定、乘坐方便、线路数量多、环境污染小等特征,成为了城市人们出行的首选交通方式。

本文针对公交线路查询系统,提出了系统数据库的设计方案,方便城市人们出行之前准确查询公交线路。

关键词】公交线路,线路查询,数据库设计
1引言
城市公交线路变换频发、信息量丰富,如果人们只能利用传统的公交线路图查阅方式来获取公交线路信息,难以确保公交线路信息的准确性,无法掌握最优的乘车路线。

因此,本文基于公交线路查询系统,提出了数据库的设计方案,从根本上解决了公交线路查询的弊端问题,便于人们在出现之前获取到最优的路线信息,节约了人们的出行时间,又降低了城市公交的运输压力,有利于城市环境污染的治理。

2公交线路查询系统数据库E-R图设计
本文在基于公交线路查询系统的基础上,给出了系统数据库的设计方案,选择SQLServer作为系统后台数据库开发工具,SQLServer功能。

公交线路查询

公交线路查询

公交线路查询引言公交线路查询是现代城市中常见的公共交通服务功能。

通过公交线路查询,人们可以获取到所需公交线路的具体信息,如线路规划、站点信息、票价、运营时间等,从而更加方便地规划自己的出行行程。

本文将介绍公交线路查询的基本原理和常见实现方式,并从用户角度出发,探讨如何更好地利用公交线路查询服务。

公交线路查询原理公交线路查询的实现原理主要基于以下几个要素:1.线路数据采集:公交线路的数据需要提前采集和整理,并存储在数据库中。

这些数据包括线路的起点和终点、中途的站点、站点之间的距离和时间等信息。

2.用户输入:用户通过公交线路查询平台输入出发地和目的地信息。

3.算法处理:查询平台使用算法处理用户输入信息并在线路数据中进行匹配,以确定最佳的公交线路。

4.结果返回:查询平台将查询结果返回给用户,通常包括推荐的公交线路、所需乘坐的公交车次、乘车站点、票价、运营时间等信息。

公交线路查询的实现方式公交线路查询可以通过多种方式实现,主要有以下几种常见的方式:1.网页应用:用户通过公交线路查询网站,输入出发地和目的地信息,网站通过查询数据库返回结果给用户。

2.手机应用:用户使用公交线路查询手机应用,输入出发地和目的地信息,应用通过查询服务器返回结果给用户。

3.智能语音助手:用户通过智能语音助手(如小度、Siri等)提出公交线路查询请求,语音助手通过网络连接查询服务器获取结果并回答用户。

4.电子屏幕:在公交车站等公共场所,可以设置电子屏幕提供公交线路查询服务,用户可以直接在屏幕上输入起终点信息获取查询结果。

如何更好地利用公交线路查询服务对于用户来说,更好地利用公交线路查询服务可以带来许多便利。

以下几点建议可以帮助用户更好地利用公交线路查询服务:1.多渠道查询:尝试使用不同的公交线路查询方式,如网页查询、手机应用、语音助手等,以获取更全面的公交线路信息。

2.实时更新:注意查询结果的实时性,公交线路可能受到交通管制、天气等影响,及时更新查询结果可以更准确地规划行程。

公交线路优化路径的查询数据结构课程设计报告

公交线路优化路径的查询数据结构课程设计报告

8)、publicpublic int getY() //get方法
bian:
1)、public void setX(int a) //set方法
2)、publicpublic void setY(intint b) //set方法
3)、public int getFir() //get方法
public void setX(int a) //set方法
{
fir=a;
}
public void setY(intint b) //set方法
{
sec=b;
}
public int getFir() //get方法
对图模型信息的赋值方法SetBusInfo()
3)、static String GetMoney(Graph G,String str1,String str2)
查询获得任何两个站点之间最便宜路径的方法
4)、static String GetPath1(Graph G,String str1,String str2)
查询获得任何两个站点之间最省时间路径(不考虑在中间站等下一辆线路的等待时间)的方法
5)、static String GetPath2(Graph G,String str1,String str2)
查询获得任何两个站点之间最省时间路径(要考虑在中间站等下一辆线路的等待时间)的方法
{
px=a;
}
public void setY(intint b) //set方法
{
py=b;
}
public String getBusnumber() //get方法

公交路线查询系统(基于数据结构和C语言)

公交路线查询系统(基于数据结构和C语言)

公交路线查询系统(基于数据结构和C语言)#include#include#include#include#define max 30#define len 20#define MAX 100typedef struct Linedot{//站int stopno;//站号char stopname[max];//站名struct Linedot *next;}linedot,*dot;typedef struct lineway{//线路int lineNo;//线路号int stopnum;//该线路上站的个数dot stop;//站}way;typedef struct lineNode{int linenum;//线路条数way data[len];//线路}line;typedef struct co_Node{int zhanNo;int busNo;struct co_Node *next;}co_node,*co_zhan;typedef struct Node{int firstbus;//始发车号char stopname[max];//站名co_zhan zhan;}node,*list;typedef struct zhanNode{int vexnum;//顶点数int arcnum;//弧数node vexs[max];//顶点}spot;typedef struct sqNode//定义双向队列{int data;struct sqNode *prior;struct sqNode *next;}sqnode,*sqlist;typedef struct//双向链队列类型{sqlist front;sqlist rear;}LQ;void initqueue(LQ *Q)//初始化队列{Q->front=Q->rear=new sqnode;Q->front->data=Q->rear->data=-1;Q->front->next=Q->rear->next=NULL; Q->front->prior=Q->rear->prior=NULL; }void enqueue(LQ *Q,int e)//进队{sqlist p;p=new sqnode;p->data=e;p->next=NULL;p->prior=Q->front;Q->rear->next=p;Q->rear=p;}void dequeue(LQ *Q,int *e)//出队{Q->front=Q->front->next;if(Q->front!=NULL)*e=Q->front->data;else*e=-1;}typedef struct stackNode//定义栈{int figuer;struct stackNode *next;}stacknode,*stack;void initstack(stack *S)//初始化栈{*S=NULL;}void push(stack *S,int e)//进栈{stack p;p=new stacknode;p->figuer=e;p->next=*S;*S=p;}int pop(stack *S,int *e)//出栈{stack p=*S;if(p==NULL){printf("栈空!\n");return 0;}*e=p->figuer;*S=(*S)->next;delete p;return 1;}void gettop(stack S,int *e)//得到栈顶{if(S==NULL){printf("栈空!\n");return;}*e=S->figuer;}int locate(spot C,char e[]){int i;for(i=0;i<c.vexnum;i++){if(strcmp(C.vexs[i].stopname,e)==0)return i;}if(i>C.vexnum){printf("Not found!\n");return -1;}}void init(FILE *fp,line *W,spot *C)//公交线路初始化{dot p,q;co_zhan R;int i,j,m,n,num;char vex1[max],vex2[max];if((fp=fopen("f.txt","r"))==NULL)//打开文件{printf("The file error!\n");getchar();exit(0);}fscanf(fp,"%d",&W->linenum);for(i=0;ilinenum;i++)fscanf(fp,"%d%d",&W->data[i].lineNo,&W->data[i].stopnu m);//输入线路号和该线路上站的个数for(i=0;ilinenum;i++){W->data[i].stop=NULL;for(j=0;jdata[i].stopnum;j++){p=new linedot;p->next=NULL;fscanf(fp,"%d%s",&p->stopno,p->stopname);//输入站名q=W->data[i].stop;if(!q)W->data[i].stop=p;else{while(q->next)q=q->next;</c.vexnum;i++)q->next=p;}}}fscanf(fp,"%d%d",&C->vexnum,&C->arcnum);for(i=0;ivexnum;i++){fscanf(fp,"%s%d",C->vexs[i].stopname,&C->vexs[i].firstbus); C->vexs[i].zhan=NULL;}for(i=0;iarcnum;i++){fscanf(fp,"%s%s%d",vex1,vex2,&num);m=locate(*C,vex1);n=locate(*C,vex2);R=new co_node;R->zhanNo=n;R->busNo=num;R->next=C->vexs[m].zhan;C->vexs[m].zhan=R;}}void search1(line W)//查询指定车次的线路及途经站点{dot p;int i,n,k=0;printf("请输入车次:");scanf("%d",&n);for(i=0;i<w.linenum;i++){if(W.data[i].lineNo==n){p=W.data[i].stop;while(p){if(k==0)printf("%s",p->stopname);elseprintf("->%s",p->stopname);p=p->next;k++;}}}}void search2(line W,spot C){int k,i;char vex[max];dot p;printf("请输入站点名:");scanf("%s",vex);k=locate(C,vex);if(C.vexs[k].firstbus!=0)printf("该站点的始发车有:%d\n",C.vexs[k].firstbus); elseprintf("该站无始发车!\n");printf("该站点的过路车有:");for(i=0;i<w.linenum;i++)p=W.data[i].stop;if(!p)continue;while(p){if(strcmp(p->stopname,vex)==0&&p!=W.data[i].stop) printf("%d ",W.data[i].lineNo);p=p->next;}}}int stackempty(stack S){if(S==NULL)return 1;return 0;}void updown(stack S,stack *S1){stack p;while(!stackempty(S)){p=new stacknode;p->figuer=S->figuer;p->next=*S1;*S1=p;S=S->next;}void printstack(spot C,stack S)//打印栈里的元素{stack S1,p;co_zhan q;initstack(&S1);updown(S,&S1);p=S1;while(p){ q=C.vexs[p->figuer].zhan;while(q){if(p->next==NULL)break;if(q->zhanNo!=p->next->figuer)q=q->next;elsebreak;}printf("%s-%d->",C.vexs[p->figuer].stopname,q->busNo); p=p->next;}}void printqueue(sqlist Q,spot C){sqlist p;stack S,S1;initstack(&S);initstack(&S1);p=Q;while(p->data!=-1){push(&S,p->data);p=p->prior;}updown(S,&S1);printstack(C,S1);}void search3(spot C,int s,int e) {co_zhan p;int flag;LQ Q;sqlist q;int u,k,i=1;initqueue(&Q);enqueue(&Q,s);while(Q.front!=Q.rear){dequeue(&Q,&u);p=C.vexs[u].zhan;if(u==e){printf("-->>Line%d:",i++); printqueue(Q.front->prior,C); printf("%s\n",C.vexs[e].stopname);dequeue(&Q,&u);if(u==-1)break;p=C.vexs[u].zhan;}while(p){k=p->zhanNo;q=Q.front;while(q->prior!=NULL){if(q->data!=k){q=q->prior;flag=1;}else{flag=0;break;}}if(k!=s&&flag==1)enqueue(&Q,k);p=p->next;}}}void search4(spot C,int s,int e,LQ *Q,int visit[]){int u,k;co_z</w.linenum;i++)</w.linenum;i++)han p;if(!visit[s]){visit[s]=1;enqueue(Q,s);while(Q->front!=Q->rear){dequeue(Q,&u);p=C.vexs[u].zhan;if(u==e){printf("-->>Line:");printqueue(Q->front->prior,C); printf("%s\n",C.vexs[e].stopname); break;}while(p){k=p->zhanNo;if(!visit[k]){visit[k]=1;enqueue(Q,k);}}}}}int count(spot C,stack S,int e){int i,j,n=0,No=-1;stack p;co_zhan q;p=S;while(p){i=p->figuer;p=p->next;if(!p)break;j=p->figuer;q=C.vexs[i].zhan;while(q){if(q->zhanNo==j&&q->busNo!=No) {n++;No=q->busNo;break;}else}}return n-1;}void destroy(stack *S){stack p=*S;while(!stackempty(*S)){*S=(*S)->next;delete(p);p=*S;}}void savestack(stack S,stack *S2) {stack S1;initstack(&S1);updown(S,&S1);updown(S1,S2);}void change(sqlist Q,stack *S) {sqlist p;p=Q;while(p->data!=-1){push(S,p->data);p=p->prior;}}void search5(spot C,int s,int e,stack *S,stack *S2,int *m) {co_zhan p;int flag;LQ Q;sqlist q;int u,k,n1,n=MAX,i=1;initqueue(&Q);enqueue(&Q,s);while(Q.front!=Q.rear){dequeue(&Q,&u);p=C.vexs[u].zhan;if(u==e){change(Q.front,S);n1=count(C,*S,e);if(n1<n){savestack(*S,S2);n=n1;*m=n;}destroy(S);dequeue(&Q,&u);if(u==-1)break;p=C.vexs[u].zhan;}while(p){k=p->zhanNo;q=Q.front;while(q->prior!=NULL) {if(q->data!=k){q=q->prior;flag=1;}else{flag=0;break;}}if(k!=s&&flag==1) enqueue(&Q,k);p=p->next;}}}int menu(){int n;printf("*******************欢迎使用K城公交查询系统******************\n");printf("**************1.查询指定车次的线路及途经站点****************\n");printf("**************2.查询指定站点的始发车和过路车****************\n");printf("**************3.查询指定起点和终点所经的所有线路************\n");printf("**************4.查询指定起点和终点所经站点最少的线路********\n");printf("**************5.查询指定起点和终点换乘次数最少的乘车路线****\n");printf("**************0.退出****************************************\n");printf("******************************************************* *****\n");printf("-----起点站:电力大学/朱辛庄/北郊农场桥东/京昌路回龙观/北京师\n");printf(" 范大学/德胜门西/清华大学西门/圆明园/颐和园/香山\n");printf("-----终点站:电力大学/朱辛庄/北郊农场桥东/京昌路回龙观/北京师\n");printf(" 范大学/德胜</n)门西/清华大学西门/中关村/圆明园/颐和园\n");printf(" /西单\n");printf("-----公交线路:345/442/696/681/699/826\n");printf("******************************************************* *****\n");printf("请选择:");scanf("%d",&n);getchar();return n;}void main(){stack S,S2,S3;LQ Q;int n,m,i,s,e,k=1,visit[len],u; char ch='Y',start[max],end[max]; FILE *fp;line W;spot C;init(fp,&W,&C);do{n=menu();switch(n){case 1:search1(W);break;case 2:search2(W,C);break; case 3:for(i=0;i<len;i++)visit[i]=0;initstack(&S);printf("请输入起点和终点:"); scanf("%s%s",start,end);s=locate(C,start);e=locate(C,end);printf("%s到%s的所有路线如下:\n",C.vexs[s].stopname,C.vexs[e].stopname);search3(C,s,e);break;case 4:for(i=0;i<len;i++)visit[i]=0;initqueue(&Q);printf("请输入起点和终点:");scanf("%s%s",start,end);s=locate(C,start);e=locate(C,end);printf("%s到%s的最短路线如下:\n",C.vexs[s].stopname,C.vexs[e].stopname);search4(C,s,e,&Q,visit);break;case 5:initstack(&S);initstack(&S2);initstack(&S3);printf("请输入起点和终点:");scanf("%s%s",start,end);s=locate(C,start);e=locate(C,end);printf("%s到%s的最少换乘路线如下:\n",C.vexs[s].stopname,C.vexs[e].stopname);search5(C,s,e,&S,&S2,&m);updown(S2,&S3);pop(&S3,&u);printf("-->>Line:");printstack(C,S3);printf("%s\n",C.vexs[e].stopname); printf("共换乘%d次\n",m);break; case 0:exit(0);break;default:printf("error!\n");}getchar();printf("\n继续吗?Y/N:");scanf("%c",&ch);}while(ch=='Y'||ch=='y');}</len;i++)</len;i++)。

公交车路线查询系统后台数据库设计

公交车路线查询系统后台数据库设计

公交车路线查询系统后台数据库设计--查询算法1. 公交车路线信息在数据库中的存储方式显然,如果在数据库中简单的使用表bus_route(路线名,路线经过的站点,费用)来保存公交车路线的线路信息,则很难使用查询语句实现乘车线路查询,因此,应该对线路的信息进行处理后再保存到数据库中,笔者使用的方法是用站点-路线关系表stop_route(站点,路线名,站点在路线中的位置)来存储公交车路线,例如,如果有以下3条路线R1: S1->S2->S3->S4->S5R2: S6->S7->S2->S8R3: S8->S9->S10则对应的站点-路线关系表stop_route为注:Stop为站点名,Route为路线名,Position为站点在路线中的位置2.直达乘车路线查询算法基于表stop_route可以很方便实现直达乘车路线的查询,以下是用于查询直达乘车路线的存储过程InquiryT0:create proc InquiryT0(@StartStop varchar(32),@EndStop varchar(32))asbeginselectsr1.Stop as 启始站点,sr2.Stop as 目的站点,sr1.Route as 乘坐线路,sr2.Position-sr1.Position as 经过的站点数fromstop_route sr1,stop_route sr2wheresr1.Route=sr2.Routeand sr1.Position<sr2.Positionand sr1.Stop=@StartStopand sr2.Stop=@EndStopend3.查询换乘路线算法(1)直达路线视图直达路线视图可以理解为一张存储了所有直达路线的表(如果两个站点之间存在直达路线,那么在直达路线视图中就有一行与之相对应)。

例如R1,R2,R3对应的RouteT0如下:RouteT0定义如下:create view RouteT0asselectsr1.Stop as StartStop, --启始站点sr2.Stop as EndStop, --目的站点sr1.Route as Route, --乘坐线路sr2.Position-sr1.Position as StopCount --经过的站点数fromstop_route sr1,stop_route sr2wheresr1.Route=sr2.Routeand sr1.Position<sr2.Position(2)换乘路线算法显然,一条换乘路线由若干段直达路线组成(每段路线的终点与下一段路线的起点相同),因此,基于直达路线视图RouteT0可以很方便实现换乘查询,以下是实现一次换乘查询的存储过程InquiryT1:create proc InquiryT1(@StartStop varchar(32),@EndStop varchar(32))asbeginselectr1.StartStop as 启始站点,r1.Route as 乘坐路线1,r1.EndStop as 中转站点,r2.Route as 乘坐路线2,r2.EndStop as 目的站点,r1.StopCount+r2.StopCount as 总站点数fromRouteT0 r1,RouteT0 r2wherer1.StartStop=@StartStopand r1.EndStop=r2.StartStopand r2.EndStop=@EndStopend同理可以得到二次换乘的查询语句create proc InquiryT2(@StartStop varchar(32),@EndStop varchar(32)) asbeginselectr1.StartStop as 启始站点,r1.Route as 乘坐路线1,r1.EndStop as 中转站点1,r2.Route as 乘坐路线2,r2.EndStop as 中转站点2,r3.Route as 乘坐路线3,r3.EndStop as 目的站点,r1.StopCount+r2.StopCount+r3.StopCount as 总站点数fromRouteT0 r1,RouteT0 r2,RouteT0 r3wherer1.StartStop=@StartStopand r1.EndStop=r2.StartStopand r2.EndStop=r3.StartStopand r3.EndStop=@EndStopend4.测试运行结果:公交车路线查询系统后台数据库设计--关联地名和站点在《公交车路线查询系统后台数据库设计——查询算法》一文中,已经实现了查询站点到站点的路线查询算法,但是,现实中用户不一定使用站点进行查询,而是使用地名。

公交线路查询系统

公交线路查询系统

摘要随着南京交通的迅速发展,城市道路多样化,城市公交线路查询系统日益成为城市交通网络不可分割的重要组成部分。

本系统旨在提供南京市公交线路查询服务,简便快捷,方便广大市民使用。

本系统运用Java作为开发语言,以Eclipse为开发平台,结合MySQL数据库,将公交线路等信息导入数据库,并添加了按多种方式查询及信息增删等,主要完成以下功能模块:查询功能:按线路查询,按站点查询,按起点终点查询;换乘查询;线路信息的添加、删除、修改等功能。

从而构成一个简便、实用的本地公交查询系统。

关键词:java;公交查询系统;Eclipse;MySQL数据库AbstractWith the rapid development of Nanjing traffic,city road to be diversified.The city bus line query system becomes an important part of city traffic network.This system is designed to provide Nanjing city bus line query service,convenient use, convenient to the general public.This system used Java as the development language, Eclipse as a development platform, combined with MySQL database, import the bus lines and other information into the database, and add in a variety of ways to query and Information increase and delete functions, mainly completed the following function modules: query function: line inquiries,according to the site, according to the starting point and end point of line query; transfer query; information to add, delete, modify and so on.Constitute a simple, practical system of local public transport system.Keywords: Java; public transport query system; Eclipse;MySQL database目录1 绪论 (1)1.1 研究背景 (1)1.2 研究目的与意义 (1)1.3 论文结构 (1)2 开发环境和技术简介 (2)2.1 Eclipse简介 (2)2.2 MySQL简介 (3)2.3 Java用户界面开发包介绍 (4)2.3.1 Swing介绍 (4)2.3.2 java.awt介绍 (5)2.4 JDBC介绍 (5)3 系统设计及数据库设计 (5)3.1 系统目标 (5)3.2 系统功能模块 (6)3.3 系统总体设计 (6)3.4 系统数据库设计 (7)3.4.1 创建数据库 (7)3.4.2 数据库的配置 (9)3.4.3 数据库的连接 (10)4 系统功能的具体实现 (11)4.1 系统开发环境 (11)4.2 界面设计 (11)4.3 查询功能模块的实现 (12)4.3.1 查询功能流程图 (12)4.3.2按线路查询 (13)4.3.3 按站点查询 (14)4.3.4 按起点终点查询信息 (16)4.4 线路管理模块的实现 (19)4.4.1 线路管理模块流程图 (19)4.4.2 添加线路和站点功能 (19)4.4.3 删除线路和站点功能 (20)4.4.4 修改线路和站点功能 (21)4.4.5 在数据库中实现线路管理功能 (22)5 系统测试与维护 (23)5.1 测试概述 (23)5.1.1 测试目的 (23)5.1.2 测试原则 (23)5.1.3 测试方法 (24)5.1.4 测试用例 (24)5.1.5 测试结果 (25)5.2 软件维护 (27)6 结论 (28)参考文献 (29)致谢.................................................................................................................................. 错误!未定义书签。

数据结构—交通系统

数据结构—交通系统

数据结构—交通系统交通系统数据结构文档范本一、引言本文档旨在为交通系统的数据结构提供详细的说明和指导。

交通系统是一种复杂的系统,需要合理的数据结构来存储和处理各种交通信息,包括路网、车辆、乘客等。

本文档将分章节介绍各个数据结构的设计和用途。

二、路网数据结构⑴节点数据结构在交通系统中,道路节点是交通网络的基本组成单元。

节点数据结构应包括节点ID、坐标信息、邻接节点列表等。

⑵道路数据结构道路数据结构用于存储交通网络中的道路信息。

道路数据结构应包括道路ID、起点和终点节点ID、道路长度、道路类型等。

⑶邻接矩阵邻接矩阵是一种常用的表示图的数据结构,用于存储道路网络中各节点之间的关系。

邻接矩阵中的元素表示节点之间的连接关系,可以方便地进行路径计算和路线规划。

三、车辆数据结构⑴车辆信息数据结构车辆信息数据结构用于储存车辆的相关信息,包括车牌号、车辆类型、驾驶员信息等。

⑵车辆位置数据结构车辆位置数据结构用于实时记录车辆的位置信息,包括经纬度、速度等。

此数据结构可用于车辆追踪和交通管控。

四、乘客数据结构⑴乘客信息数据结构乘客信息数据结构用于储存乘客的个人信息和行程信息,包括姓名、方式号、上车时间、下车时间等。

⑵乘客位置数据结构乘客位置数据结构用于记录乘客的实时位置信息,以便实时调度和定位乘客所在位置。

五、附件附件1:交通系统数据库表结构设计附件2:交通规则及路网数据源格式说明六、法律名词及注释⑴道路交通安全法道路交通安全法是指我国国家立法机关制定的维护道路交通安全和保护交通参与者生命安全的法律法规。

⑵交通管理部门交通管理部门是指负责管理和监督交通运输的行政部门,包括公安交通管理部门、交通运输主管部门等。

⑶驾驶员执照驾驶员执照是指驾驶人获得驾驶资格后,由交通管理部门发放的合法证件,用于证明其具备相应的驾驶技能和合法驾驶资格。

附件:附件1:交通系统数据库表结构设计附件2:交通规则及路网数据源格式说明法律名词及注释:道路交通安全法:我国国家立法机关制定的维护道路交通安全和保护交通参与者生命安全的法律法规。

北京理工大学数据结构课程设计专题报告(图)公交线路查询

北京理工大学数据结构课程设计专题报告(图)公交线路查询

专题设计(图)报告题目:公交线路查询小组成员:问题描述当一个用户从甲地到乙地时,由于不同需求,就有不同的交通方式及不同的交通路线。

有人希望以最快速度到达,有人希望以最短距离到达,有人希望用最少的费用等。

交通方式有公交车和地铁。

编写一北京公交线路查询系统,通过输入起始站、终点站,为用户提供三种或以上决策的交通咨询。

设计要求a. 提供对交通线路进行编辑功能。

要求可添加或删除线路。

b. 提供两种交通工具,公交车和地铁,设定路程所需要的时间、距离及费用等参数。

c. 提供多种决策:最短距离、最快到达、最少费用、最少换乘次数等。

d. 中途不考虑等候、拥堵等消耗时间。

e. 该系统以人机对话方式进行。

用户输入起始站、终点站及需求原则,系统输出乘车方案:乘什么车、乘几路车、距离、时间、费用换乘方法等相关信息。

数据结构本程序运用了关于图这种数据结构。

它的抽象数据类型定义如下:typedef struct unDiGraph{int numVerts; //结点costAdj cost; //邻接矩阵}unDiGraph,*UNG;基本操作:unDiGraph* CreateCostG()操作结果:构造带权(费用)图。

unDiGraph* CreateTimeG()操作结果:构造带权(时间)图。

构造地铁带权(费用)图。

PathMat *Floyed(unDiGraph *D)操作结果:Floyed函数求任意两点的最短路径。

设计与实现算法思路(1) 数据存储。

站点信息(站点代码)、交通信息(站点间的里程、公交和地铁时刻)存储于磁盘文件。

建议把站点信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。

(2) 数据的逻辑结构。

根据设计任务的描述,其站点间的交通问题是典型的图结构,可看作为有向图,图的顶点是站点,边是站点之间所耗费的时间(要包括中转站的等候时间)或车费。

(3) 数据的存储结构。

采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。

公交路线查询系统数据库设计方案

公交路线查询系统数据库设计方案

1. 公交车路线信息在数据库中的存储方式显然,如果在数据库中简单的使用表bus_route(路线名,路线经过的站点,费用>来保存公交车路线的线路信息,则很难使用查询语句实现乘车线路查询,因此,应该对线路的信息进行处理后再保存到数据库中,考试大使用的方法是用站点-路线关系表stop_route(站点,路线名,站点在路线中的位置>来存储公交车路线,例如,如果有以下3条路线R1:S1->S2->S3->S4->S5R2:S6->S7->S2->S8R3:S8->S9->S10则对应的站点-路线关系表stop_route为Stop Route PositionS1 R1 1S2 R1 2S3 R1 3S4 R1 4S5 R1 5S6 R2 1S7 R2 2S2 R2 3S8 R2 4S8 R3 1S9 R3 2S10 R3 3注:Stop为站点名,Route为路线名,Position为站点在路线中的位置2.直达乘车路线查询算法基于表stop_route可以很方便实现直达乘车路线的查询,以下是用于查询直达乘车路线的存储过程InquiryT0:create proc InquiryT0(@StartStop varchar(32>,@EndStop varchar(32>> asbeginselectsr1.Stop as 启始站点, sr2.Stop as 目的站点, sr1.Route as 乘坐线路, sr2.Position-sr1.Position as 经过的站点数fromstop_route sr1, stop_route sr2 wheresr1.Route=sr2.Routeand sr1.Position<sr2.Position and sr1.Stop=@StartStopand sr2.Stop=@EndStop end3.查询换乘路线算法(1>直达路线视图直达路线视图可以理解为一张存储了所有直达路线的表(如果两个站点之间存在直达路线,那么在直达路线视图中就有一行与之相对应>create view RouteT0 asselectsr1.Stop as StartStop, --启始站点sr2.Stop as EndStop, --目的站点sr1.Route as Route, --乘坐线路sr2.Position-sr1.Position as StopCount --经过的站点数fromstop_route sr1, stop_route sr2 wheresr1.Route=sr2.Routeand sr1.Position<sr2.Position(2>换乘路线算法显然,一条换乘路线由若干段直达路线组成,因此,基于直达路线视图RouteT0可以很方便实现换乘查询,以下是实现一次换乘查询的存储过程InquiryT1:create proc InquiryT1(@StartStop varchar(32>,@EndStop varchar(32>> asbeginselectr1.StartStop as 启始站点, r1.Route as 乘坐路线1, r1.EndStop as 中转站点, r2.Route as 乘坐路线2, r2.EndStop as 目的站点, r1.StopCount+r2.StopCount as 总站点数fromRouteT0 r1, RouteT0 r2 wherer1.StartStop=@StartStopand r1.EndStop=r2.StartStop and r2.EndStop=@EndStop end同理可以得到二次换乘的查询语句create proc InquiryT2(@StartStop varchar(32>,@EndStop varchar(32>> asbeginselectr1.StartStop as 启始站点, r1.Route as 乘坐路线1, r1.EndStop as 中转站点1, r2.Route as 乘坐路线2, r2.EndStop as 中转站点2, r3.Route as 乘坐路线3, r3.EndStop as 目的站点, r1.StopCount+r2.StopCount+r3.StopCount as 总站点数fromRouteT0 r1, RouteT0 r2, RouteT0 r3 wherer1.StartStop=@StartStopand r1.EndStop=r2.StartStop and r2.EndStop=r3.StartStop and r3.EndStop=@EndStop end(3>.测试exec InquiryT0 ’S1’,’S2’exec InquiryT1 ’S1’,’S8’exec InquiryT2 ’S1’,’S9’运行结果:那么有没有方法可以提高筛选第2段路线的效率呢?答案是肯定的。

代做数据结构课程设计

代做数据结构课程设计

代做数据结构课程设计一、课程目标知识目标:1. 让学生掌握数据结构的基本概念,包括线性表、树、图等;2. 使学生了解常见数据结构的特点,如数组、链表、栈、队列、二叉树等;3. 帮助学生掌握各类数据结构的使用场景及其操作方法;4. 引导学生学会分析算法的时间复杂度和空间复杂度。

技能目标:1. 培养学生运用所学数据结构解决实际问题的能力;2. 提高学生编写与数据结构相关算法的编程技能;3. 培养学生通过分析问题,选择合适的数据结构进行问题求解的能力。

情感态度价值观目标:1. 激发学生对数据结构和算法的兴趣,培养其主动学习的习惯;2. 培养学生的团队协作意识,使其在合作中提高沟通与协作能力;3. 引导学生认识到数据结构在实际应用中的重要性,增强其理论联系实际的能力。

分析课程性质、学生特点和教学要求,本课程旨在使学生在掌握数据结构基本知识的基础上,通过实际案例分析和动手实践,提高编程能力和问题求解能力。

课程目标分解为具体学习成果,以便后续教学设计和评估,包括:学生能熟练运用所学数据结构描述实际问题;能编写相应的算法并进行调试;能分析算法的优缺点,并在实际问题中加以改进。

二、教学内容1. 数据结构基本概念:线性表、树、图等;- 线性表:数组、链表- 树:二叉树、遍历算法、线索二叉树- 图:图的表示、遍历算法、最短路径算法2. 常见数据结构及其操作:- 栈、队列:原理、应用场景、操作方法- 排序算法:冒泡、选择、插入、快速、归并排序- 查找算法:顺序、二分、哈希查找3. 算法分析:- 时间复杂度:大O表示法、常见算法时间复杂度分析- 空间复杂度:常见算法空间复杂度分析4. 实践案例:- 线性表应用:多项式相加、稀疏矩阵存储- 树结构应用:家谱树、表达式求值- 图结构应用:公交路线查询、社交网络分析5. 课程项目设计:- 设计一个数据结构课程项目,涵盖所学知识点,如:停车场管理系统、图书管理系统等;- 项目要求:团队合作、分工明确、需求分析、设计文档、编码实现、测试与优化。

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

数据结构-图——公交线路查询
•功能实现•最短路径算法•输出结果展示
•实现的功能:
•内置路径
•最短距离•查询最少时间
最少花费•删除路线
•添加路线
无向图,邻接表存储方式
•每一条边定义为一个结构,包含6个参数。

最短路径算法
•Dijkstra算法
•根据已经确定了的点的距离,来确定该点相邻顶点的距离,不断的向外散射,直到所以的点的到起点的最短距离确定为止。

将所有顶点到起始点的最短距离存在一张表里,随时调用。

•初始化顶点信息
将起点s的dist字段设为0;
•输入的起点为v
•从所有顶点中找到与v相邻的顶点
•找到这些顶点中dist最小的并且known为false的h,然后,将该顶点h的known置为true;
•然后更新与顶点h相邻的所有其它known为false的顶点w的dist和path的值。

•如果h.dist+distance(h,w) < w.dist;
则更新w.dist= h.dist+ distance(v,w);(distance(v,w)就是表示权值)
w.path=h;
•遍历完所有的顶点,则终止。

得到了存储了各个顶点到起点的最短路径的表,
通过查表,就可以输出最短路径和相应的路线。

查询:
输入起点与终点
输出最短距离,及相应路线
最少时间,及相应路线
最少花费,及相应路线•路线的输出
需要从最短路径表中,
从终点向起点方向逐个寻点,再反方向输出。

•删除路线:
•测试结果:
•添加路线:
比如说,添加一条地铁线
•添加线路后的输出结果:未添加路线时(左图)
•存在的不足:
•虽然统计出了每两点之间是坐地铁还是公交,但是换成次数尚未实现
•时间有限,图形化界面设计没有实现
谢谢大家!。

相关文档
最新文档