交通咨询系统设计

合集下载

数据结构课程设计—城市道路交通咨询系统【范本模板】

数据结构课程设计—城市道路交通咨询系统【范本模板】
(1)进入程序后,用户可自己设置城市的个数,以及所有城市之间总共的路径,且分别用顶点和边表示城市与路径
(2)用户根据自己设置的城市个数和路径数,具体输入每个路径的起始点以及每条路径的长度。
(3)进入菜单选择界面
(4)选择2,系统为用户进行提供任意城市的交通查询,即查询任意两个城市之间的一条最短路径。
基本思想:设G(V,E)是一个带权有向图,把图中的顶点集合V分成两组,第一组为已经求出的最短路径的顶点集合(用S表示,初始时S中只有一个原点,以后每求得一条最短路径就加入的集合S中,知道全部顶点都加入到集合中),第二组,为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点就如S中。如果两个顶点之间有权值,并且各个路径的权值不同,就把最小的作为顶点与顶点的最短距离.
3.定义一个Floyd函数
void Floyd(MGraph*G,int n);
2
图2—2
邻接矩阵构造图结构函数
数据类型定义:
typedef struct
{
VertexTypevexs[MAX];
Adjmatrix arcs[MAX][MAX];
}MGraph;
void CreateMGraph(MGraph *G,int n,int e)//邻接矩阵构成有向图
这次在应用中,我发现了自己的很多不足,在编写城市交通咨询系统的过程中,自己C语言方面的只是掌握太少,很多功能需求只能退而求其次,一次又一次的更改,一次又一次的失败,也终于是在最后也完成了自己的要求,同时我也知道了平时用功学习的重要性。尤其是在日常学习之中,对于单一的只是点也许掌握的还不错,但是自己动手太少,实践经验严重不足,且面临课程设计之时,要求多方面的只是结和编码,对于我而言还是有很大的难度的。如此次对于邻接矩阵的存储于读取,以及最短路径算法的实现,两个及其重要的算法,狄克斯特拉算法和佛洛依德算法,在具体的应用上还是有很多不足。

交通咨询系统设计课程设计

交通咨询系统设计课程设计

课程设计报告课程名称数据结构课题名称交通咨询系统设计专业信息管理与信息系统班级学号姓名指导教师2013 年12月31 日一、设计内容与设计要求1设计内容[问题描述] 在交通网络非常发达的今天,人们出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需时间等问题也很感兴趣。

对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。

图中顶点表示城市,边表示城市之间的交通关系。

设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到达另外一个城市顶点之间的最短路径(里程)的问题。

[基本功能]1).根据实际情况,先建立交通网络图的存储结构。

2).求某个城市到达其余各城市的最短路径。

3).任一输入两个城市,要求求出他们之间的最短路径。

2设计要求:1).设计正确,方案合理。

2).界面友好,使用方便。

3).程序精炼,结构清晰。

4).设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。

5).实际操作过程中遇到的问题及解决方法:设计总结及心得体会。

6).上机演示。

二、进度安排第 17 周星期二 8时:00分——11时:30分星期三 8时:00分——11时:30分星期四 14时:00分——17时:30分星期五 8时:00分——11时:30分第 18 周星期一 8时:00分——11时:30分星期二 8时:00分——11时:30分附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。

正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。

正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的源代码,要求对程序写出必要的注释)。

正文总字数要求在5000字以上(不含程序源代码)。

大数据结构课程设计交通咨询系统设计

大数据结构课程设计交通咨询系统设计

适用标准文案设计题目<二>:交通咨询系统设计P160一、设计要求1.问题描绘依据不一样目的的游客对交通工拥有不一样的要求。

比如,因公出差的游客希望在旅途中的时间尽可能的短,出门旅游的游客希望旅费尽可能的少,而老年人则要求中转次数少。

模拟一个全国城市之间的咨询交通程序,为游客供给两种或三种最优的交通路线。

2.需求剖析二、纲要设计1.主界面设计(图“交通咨询系统”主菜单)2.储存构造设计本系统采纳图构造种类储存抽象交通咨询系统的信息。

typedefstructTrafficNode{charname[MAX_STRING_NUM];//班次//MAX_STRING_NUM 最为10intStartTime,StopTime;//起止时间intEndCity;//该有向边指向的极点在数组中的地点,即该城市编号intCost;//票价出色文档}TrafficNodeDat;typedefstructVNode{CityTypecity;intTrainNum,FlightNum;//标志下边Train数组和Flight数组里元素个数TrafficNodeDatTrain[MAX_TRAFFIC_NUM];//数构成员为构造体,记录了到达城市、起止时间、票价和班次TrafficNodeDatFlight[MAX_TRAFFIC_NUM];intCost;//遍历时抵达该城市的耗资(时间或许花费)}VNodeDat;typedefstructPNode{intCity;intTraNo;}PNodeDat;3.系统功能设计1)增添城市。

增添一个城市的名称2)删除城市。

输入一个城市名称,删除该城市。

3)增添交通路线。

输入开端城市、终点城市、航班或火车、车次、开端时间、终点时间和票价4)删除交通路线。

输入火车或飞机的班次删除该交通路线。

5)查问最小花费路线。

输入开端城市、终点城市、航班或火车、车次、开端时间、终点时间查问最小花费路线。

数据结构课程设计交通咨询系统设计

数据结构课程设计交通咨询系统设计

信息科学与工程学院课程设计任务书题目:交通咨询系统设计学号: 201112220141姓名:年级:专业:计算机应用与技术课程:数据结构指导教师:职称:完成时间:课程设计任务书及成绩评定一、需求分析设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一城市顶点之间的最短路径(里程)或最低花费或最少时间等问题。

对于不同的咨询要求,可输入城市间的路程或所需时间或所需费用。

本设计共分三部分,一是建立交通网络图的存储结构;二是解决单源最短路径问题;三是实现任两个城市顶点之间的最短路径问题。

1.1.1建立图的存储结构邻接矩阵是表示图形中顶点之间相邻关系的矩阵。

图的邻接矩阵是定义如下的n 阶方阵:设G=(V ,E )是一个图,结点集为{}n v v v V ,,,21 =。

G 的邻接矩阵,E,,0E,,)(,)(⎪⎩⎪⎨⎧>∉<∞>∈<==⨯⨯j i j i j i j i n n j i ij n n ij v v v v v v v v w a a A )或当(,或)或当(, 当邻接矩阵的行表头、列表头顺序一定时,一个图的邻接矩阵表示是唯一的。

图的邻接矩阵表示,除了需用一个二维数组存储顶点之间的相邻关系的邻接矩阵外,通常还需要使用一个具有n 个元素的一维数组来存储顶点信息,其中下标为i 的元素存储顶点i 的信息。

因此,图的邻接矩阵的存储结构定义如下:1.1.2 单源最短路径最短路径的提法很多。

在这里先讨论单源最短路径问题:即已知有向图(带权),我们希望找出从某个源点S ∈V 到G 中其余各顶点的最短路径。

为了叙述方便,我们把路径上的开始点称为源点,路径的最后一个顶点为终点。

那么,如何求得给定有向图的单源最短路径呢?迪杰斯特拉(Dijkstra )提出按路径长度递增产生诸点的最短路径算法,称之为迪杰斯特拉算法。

迪杰斯特拉算法求最短路径的实现思想是:设G=(V ,E )是一个有向图,结点集为,}v ,,v ,{v V n 21⋯=,cost 是表示G 的邻接矩阵,cost[i][j]表示有向边<i,j>的权。

大数据结构课程设计交通咨询系统设计

大数据结构课程设计交通咨询系统设计

设计题目<二>:交通咨询系统设计P160 一、设计要求 1 .问题描述根据不同目的的旅客对交通工具有不同的要求。

例如,因公出差的旅客希望在旅途中的时间尽可能的短,出门旅行的旅客希望旅费尽可能的少,而老年人则要求中转次数少。

模拟一个全国城市之间的咨询交通程序,为旅客提供两种或三种最优的交通路线。

2.需求分析二、概要设计1.主界面设计(图“交通咨询系统”主菜单)2.存储结构设计本系统采用图结构类型存储抽象交通咨询系统的信息typedef struct TrafficNodetmp = k;}printf("%s", AdjList[track[i]].Train[tmp].name);pri ntf("%2d:%2d-%2d:%2d",AdjList[track[i]].Trai n[tmp].StartTime / 60,AdjList[track[i]].Train[tmp].StartTime % 60,AdjList[track[i]].Trai n[tmp].StopTime / 60,AdjList[track[i]].Trai n[tmp].StopTime % 60);else{for (i--; i>0; i--) um;[k++)ghar name[MAX_STRlNG_NUM];jajnN{printf("\n%s:", CityName[track[i]]);end = track[i - 1]; min = 32767;for (k = 0; k<AdjList[track[i]].FlightNum; k++)if (AdjList[track[i]].Train[k].EndCity ==end&&min>AdjList[track[i]].Flight[k].Cost){min = AdjList[track[i]].Flight[k].Cost;tmp = k;}printf("%s",AdjList[track[i]].Flight[tmp].name);printf("%2d:%2d-%2d:%2d",AdjList[track[i]].Flight[tmp].StartTime / 60,AdjList[track[i]].Flight[tmp].StartTime % 60,AdjList[track[i]].Flight[tmp].StopTime / 60,AdjList[track[i]].Flight[tmp].StopTime % 60);}}printf("\n%s: DESTINATION!", CityName[track[0]]);printf("\nMin Cost : %d\n", cost);}void Dijkstra(int matx[Dij_MAXN][Dij_MAXN], int p_start, int p_end, int TravelType){int PreCity[Dij_MAXN]; 添加城市在主菜单下,用户输入 1,添加城市名称(图添加城市)2.删除城市在主菜单下,用户输入2,删除已添加城市名称(图删除城市)3.添加交通路线在主菜单下,用户输入3,已添加城市名称。

交通咨询系统 C语言【范本模板】

交通咨询系统 C语言【范本模板】

CHINA交通咨询系统目录一、需求分析 (2)1、程序的功能及设计要求 (2)2、输入输出的要求 (2)二、环境说明 (2)三、详细设计 (3)1、模块设计 (3)2、画出各函数的调用关系图、主要函数的流程图。

(3)2、详细代码 (4)四、调试分析 (4)1、测试数据: (4)2、借鉴的资料 (5)五、课程总结 (6)六、附录 (6)一、需求分析1、程序的功能及设计要求在交通网络非常发达、交通工具和交通方式不断更新的今天,人们在出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需时间等问题也感兴趣.对于这样一个人们关心的问题,通过建立交通网络图的存储结构图,提供用户查询的功能,功能一:通过输入城市名及任意两个城市的距离,查询任意两个城市之间的最短距离,从而达到最省目的;功能二:通过输入城市名以及任意两个程序的距离,查询中转路线最少。

程序所具有的功能特色本程序主要目的是为了给用户提供路径咨询,可以通过输入设置,延续程序的拓展性。

设计要求及分析设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一城市顶点之间的中转次数最少问题或最低花费或最少时间(最短路径)问题。

该设计共分三个部分:一是建立交通网络图的存储结构;二是解决单源最短路径问题;最后再实现任意两个城市顶点之间的最短路径问题。

1。

建立交通网络图的存储结构要实现设计要求,首先要定义交通图的存储结构:邻接链表和邻接矩阵;2。

解决任意两个城市顶点之间的中转次数最少的问题;3. 解决任意两个城市顶点之间的最短路径(最低花费或最少时间)问题。

2、输入输出的要求定义变量类型应该保持类型一致,通过键盘输入,确保输入输出一致,使最短路径途径以及最短路径能够简单明了的输出,同时保持程序简洁美观,效果明显。

输入要求为输入界面直观、亲切;有利于快速输入;有利于准确输入;有利于输入、修改;方便操作。

输出要求:输出要求应简单、直观,一目了然,尽量符合用户的习惯,便于用户阅读、理解与使用.输出内容应尽量汉字化,从而使输出格式醒目;各种输出设计要长考虑以利于系统发展和输出项目扩充、变动的需要;输出操作方便二、环境说明系统:WINDOS7开发软件:vc6+三、详细设计1、模块设计交通咨询系统模块图如下由模块图可知,该设计共分三个部分:一是建立交通网络图的存储结构;二是解决单源最短路径问题;最后再实现任意两个城市顶点之间的最短路径问题。

数据结构课程设计全国交通咨询系统

数据结构课程设计全国交通咨询系统

数据结构课程设计全国交通咨询系统数据结构课程设计全国交通咨询系统随着交通工具的快速发展,现代人的出行方式更加灵活便捷,交通行业也变得越来越重要。

然而,随之而来的交通拥堵、安全问题和出行效率等问题亟待解决。

因此,交通咨询系统的开发应运而生。

本文介绍一个数据结构课程设计项目——全国交通咨询系统,该系统旨在为用户提供便捷、全面的交通出行信息和服务。

该系统主要包括以下方面的功能:1. 城市选择及路线查询功能用户可选择目的地城市,系统将返回该城市的基本信息,以及从用户当前位置到目的地的交通路线和方案,并提供相应的时间和费用信息。

2. 交通工具查询功能用户可在系统中查询各种交通工具的班次、价格、车次和到达时间等相关信息,以便用户做出最优出行方案。

3. 路况信息查询该系统可实时获取交通状况信息,并展示给用户最新的路况信息。

此外,当用户选择出行方式时,系统可根据实时路况为用户提供最佳出行方案。

4. 预订和购票该系统可为用户提供方便的预订和购票服务。

用户可在线预订和购买机票、火车票和长途汽车票等交通工具,并选择合适的座位和时间。

5. 旅游景点推荐功能该系统可根据用户的出行方案提供适宜的旅游景点推荐。

用户可在系统中了解这些景点的详细信息和交通时间,以便更好地规划自己的行程。

该全国交通咨询系统的实现需要多种数据结构的支持,例如图、树、堆栈、链表、哈希表等。

下面分别讨论每个功能的实现方法和相关数据结构。

1. 城市选择及路线查询功能城市选择及路线查询功能需要通过图的遍历来实现。

图是由顶点和边组成的集合,可以用来表示城市及它们之间的相互关系。

在本系统中,每个城市可以看做一个顶点,每条连接两个城市的路径被视为一条边。

为了实现城市选择及路线查询功能,需要对图进行遍历。

在这个系统中,广度优先搜索算法(BFS)是最佳选择,因为BFS可以给出最近的解决方案。

2. 交通工具查询功能交通工具查询功能需要通过树来实现。

树是由节点和边组成的集合,可以用来表示各种结构化数据。

交通咨询模拟系统课程设计

交通咨询模拟系统课程设计

交通咨询模拟系统课程设计一、课程目标知识目标:1. 让学生掌握交通咨询模拟系统的基本原理和功能。

2. 引导学生了解交通咨询模拟系统在实际生活中的应用。

3. 帮助学生理解并掌握交通流量的数据分析方法。

技能目标:1. 培养学生运用所学知识设计和搭建简单的交通咨询模拟系统的能力。

2. 提高学生分析交通数据,提出合理解决方案的能力。

3. 培养学生团队协作和沟通表达的能力。

情感态度价值观目标:1. 激发学生对交通咨询模拟系统相关领域的兴趣,培养探究精神。

2. 培养学生关注社会交通问题,认识到科技在解决交通问题中的重要性。

3. 引导学生树立正确的价值观,关注交通安全,提高社会责任感。

课程性质:本课程为实践性较强的课程,以项目式教学为主,结合理论讲解和实际操作。

学生特点:学生为初中生,具备一定的信息技术基础,对新鲜事物充满好奇心,喜欢动手实践。

教学要求:教师需关注学生个体差异,提供针对性的指导,鼓励学生积极参与讨论和实践,注重培养学生的学习兴趣和动手能力。

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

二、教学内容1. 交通咨询模拟系统概述- 交通咨询模拟系统的定义与作用- 交通咨询模拟系统的发展与应用2. 交通咨询模拟系统的基本原理- 交通流量的基本概念- 交通流量的数据分析方法- 交通咨询模拟系统的构建原理3. 交通咨询模拟系统的设计与实现- 系统设计的基本流程与方法- 系统实现的工具与技术- 系统测试与优化4. 实践项目:设计一个简单的交通咨询模拟系统- 项目目标与要求- 项目实施步骤与方法- 项目成果展示与评价5. 交通咨询模拟系统在实际生活中的应用案例- 城市交通拥堵解决方案- 公共交通优化- 紧急救援路径规划教学内容安排与进度:第1课时:交通咨询模拟系统概述第2课时:交通咨询模拟系统的基本原理第3课时:交通咨询模拟系统的设计与实现(上)第4课时:交通咨询模拟系统的设计与实现(下)第5课时:实践项目:设计一个简单的交通咨询模拟系统第6课时:交通咨询模拟系统在实际生活中的应用案例教学内容与教材关联性:本教学内容紧密结合教材中关于信息技术应用、数据分析、系统设计等相关章节,确保学生能够学以致用,提高解决实际问题的能力。

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

目录1 概述 (2)1.1 问题描述 (2)1.2 实现意义 (2)2 系统分析 (2)2.1 需求分析 (2)2.1.1程序的功能 (2)2.1.2输入输出的要求 (2)2.2 设计思想 (2)2.3 设计要求 (3)3 概要设计 (3)3.1建立图的存储结构 (3)3.2 单源最短路径 (3)3.3 任意一对顶点间最短路径 (4)4 详细设计 (4)4.1 用邻接矩阵构造图结构函数CreateMGraph() (4)4.2 费洛伊德Floyd() (5)4.3 迪杰斯特拉Dijkstra() (5)4.4 主要函数流程图及其函数调用 (6)4.4.1 主要函数流程图 (6)4.4.2 一个城市到其他城市的路径调用 (7)4.4.3 任意两个城市之间路径调用 (7)5 运行与测试 (7)5.1 有向图存储结构的建立模块的输出 (8)5.2 单源路径迪杰斯特拉算法模块的输出 (9)5.3 费洛伊德算法模块的输出 (9)6 总结与心得 (9)参考文献 (10)附录 (10)1 概述1.1 问题描述在交通网络非常发达,交通工具和交通方式不断更新的今天,人们在出差、旅游或做其它出行时,不仅关心节省费用,而且对里程和所需时间等问题也感兴趣。

对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。

图中顶点表示城市之间的交通关系。

这个交通系统可以回答旅客提出的各种问题。

比如任意一个城市到其他城市的最短路径,任意两个城市之间的最短路径问题。

1.2 实现意义便于人们的日常出行,且更好地满足了用户的出行需求。

这种最短路径问题的计算方法既简单又便于实现,同时大大提高了计算机的运行速率。

2 系统分析2.1 需求分析2.1.1程序的功能(1)用户自己可以建立不同的路径之间的关系网(2)可以查询某个城市到达其余各城市的最短路径。

(3)可以任一查询两个城市之间的最短路径。

2.1.2输入输出的要求在刚进入主界面后系统提示输入建立交通网络储存结构,输入顶点个数和和边数为整数不能输入其他字符,随后系统提示输入边与边之间的关系分别为i,j,w表示边之间的距离。

然后进入查询页面,输入整数1,2,0分别表示你所要查询的功能:一个城市至其他所有城市的最短路径查询、任意两个城市之间的最短路径查询、退出程序。

不能输入其他字符否则不能执行操作。

在整个操作都是用整数表示城市。

2.2 设计思想用邻接矩阵来存储交通网络图的信息,运用迪杰斯特拉算法实现图上单源最短路径问题,然后运用费洛伊德算法实现图中任意一对顶点间最短路径问题,这样就会实现交通咨询系统设计的问题。

2.3 设计要求该交通咨询系统要完成城市网络图的存储,并要实现求任意一个城市顶点到其他城市顶点的最短路径问题,还要实现任意两个城市顶点间的最短路径问题。

故设计要分成三部分,一是建立交通网络图的存储结构;二是解决单源路径问题;最后再实现两个城市之间的最短路径问题。

3 概要设计3.1建立图的存储结构首先要定义交通图的存储结构。

邻接矩阵是表示图形中顶点之间相邻关系的矩阵。

设G=(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下定义n阶方阵。

A[i,j]= W i,j 若(v i,v j)或<v i,v j>€E(G);0或∞,当不满足上述条件时。

一个图的邻接矩阵表示是唯一的。

图的邻接矩阵表示,除了需要用一个二维数组存储顶点之间相邻关系的邻接矩阵外,通常还需要使用一个具有n个元素的一维数组来存储顶点信息,其中下表为i的元素存储顶点v的信息。

因此,图的邻接矩阵的存储结构定义如下:#define MVNum 50 //最大顶点数typedef struct{VertexType vexs[MvNum];Adjmatrix arcs[MVNum][MVNum];}MGraph;3.2 单源最短路径单源路径问题:即已知有向图(带权),我们希望找出从某个源点S€V到G中其余各顶点的最短路径。

为了叙述方便,我们把路径上的开始点称为源点,路径的最后一个顶点称为终点。

迪杰斯特拉算法求最短路径的实现思想:设有向图G=(V,E),其中,V={1,2,…,n},cost是表示G的邻接矩阵,cost[i][j]表示有向边<i,j>的权。

若不存在有向边<i,j>,则cost[i][j]的权为无穷大(这里取值为32767)。

设S是一个集合,其中的每个元素表示一个顶点,从源点到这些顶点的最短距离已近求出。

设顶点v1为源点,集合S的初态只包含顶点v1。

数组dist记录从源点到其他各顶点当前的最短距离,其初值为dist[i]= cost[v1][i],i=1,2,...,n。

从S之处的顶点集合V-S中选出一个顶点w,使dist[w]的值最小。

于是从源点到达w 只通过s中的顶点,把w加入集合S中,调整dist中记录的源点到V-S中每个顶点v的距离:从原来的dist[v]和dist[w]+cost[w][v]中选择较小的值作为新的dist[v]。

重复上述过程,直到S中包含V中其余顶点的最短路径。

最终结果是:S记录了从源点到该顶点存在最短路径的顶点集合,数组dist记录了从源点到V中其余各顶点之间的最短路径,path是最短路径的路径数组,其中path[i]表示从源点到顶点i之间的最短路径的前驱顶点。

迪杰斯特拉算法用自然语言描述如下:初始化S和D,置空最短路径终点集,置初始的最短路径值;S[v1]=TRUE; D[v1]=0; //S集初始时只有原点,源点到源点的距离为0;while(S集中顶点数<n){开始循环,每次求得v1到某个v顶点的最短路径,并加v到S集中;S[v]=TRUE;更新当前最短路径及距离;}3.3 任意一对顶点间最短路径任意顶点对之间的最短路径问题,是对于给定的有向网络图G=(V,E),要对G中任意一对顶点有序对“v,w(v≠w)”,找出v到w的最短路径。

对此问题有两种处理方法:方法一:依次把有向网络图中的每个顶点作为源点,重复执行前面讨论的迪杰斯特拉算法n次,即可求得每对之间的最短路径。

方法二(费洛伊德算法):其基本思想是:假设求从顶点v i到v j的最短路径。

如果从v i到v j存在一条长度为arcs[i][j]的路径,该路径不一定是最短路径,还需要进行n次试探。

首先考虑路径<v i,v1>和<v1,v j>的路径是否存在。

如果存在,则比较路径<v i,v j>和<v i,v1,v j>的路径长度,取长度较短者为当前所求得的最短路径。

该路径是中间顶点序号不大于1的最短路径。

其次,考虑从v i到v j是否包含有顶点v2为中间顶点的路径<v i,…,v2,…,v j>,若没有,则说明从v i到v j的当前最短路径就是前一步求出的;若有,那么<v i,…,v2,…,v j>可分解为<v i,…,v2>和<v2,…,v j>,而这两条路径是前一次找到的中间点序号不大于1的最短路径,将这两条路径长度相加就得到路径<v i,…,v2,…,v j>的长度。

将该长度与前一次中求得的从v i到v j的中间顶点序号不大于2的最短路径。

依次类推……直至顶点v n加入当前从v i到v j的最短路径后,选出v i到v j 的中间顶点序号不大于n的最短路径为止。

由于图G中顶点序号不大于n,所以v i到v j的中间顶点序号不大于n的最短路径,已考虑了所有顶点作为中间顶点的可能性,因此,它就是v i到v j的最短路径。

4 详细设计4.1 用邻接矩阵构造图结构函数CreateMGraph()其中vexs[MVNum]保存顶点信息,arcs[MVNum][MVNum]用于保存边与边之间的信息。

在构建时通过输入的边数i,j作为矩阵的行、列确定顶点的出度和入度。

用邻接矩阵方法存储图,很容易确定图的任意两个顶点是否是有边相连,因此用邻接矩阵对有利于后面费洛伊德算法和迪杰斯特拉算法。

数据类型定义:typedef struct{VertexType vexs[MVNum];Adjmatrix arcs[MVNum][MVNum];}MGraph;邻接矩阵的程序代码:for(k=1;k<=e;k++) //读入e条边建立邻接矩阵{ printf(" 第%d条边的信息:",k);scanf("%d,%d,%d",&i,&j,&w);G->arcs[i][j]=w;G->arcs[j][i]=w;}4.2 费洛伊德Floyd()费洛伊德算法对求任意两个顶点之间的路径较优。

用邻接矩阵保存图存储后,另外需要存一个二维数组A存放当前顶点之间的最短路径长度。

分量A[i][j]表示当前顶点i到j的最短路径长度。

费洛伊德算法的基本思维是递推产生一个矩阵序列A0,A1,A2,….Ak,…An,其中Ak[i][j]表示从顶点到vi到顶点vj 的路径上所经过的顶点编号不大于k的最短路径长度。

A[i][j]=cost[i][j]A(k+1)[i][j]=min{Ak[i][j],Ak[i+1][k+1]+Ak[k+1][j]}费洛伊德主要算法,若Ak[i][j]已求出,顶点i到顶点k+1的路径长度为Ak[i][k+1],顶点路径长度为Ak[i][j],顶点k+1到顶点j的路径长度为Ak[k+1][j],如果此时Ak[i][k+1]+Ak[k+1][j]< Ak[i][j],则将原来的顶点i到顶点j的路径改为顶点,否则不需要修改顶点i到j的路径。

for(k=1;k<=n;k++){for(i=1;i<=n;i++)for(j=1;j<=n;j++){ if(D[i][k]+D[k][j]<D[i][j]){D[i][j]=D[i][k]+D[k][j]; //修改长度P[i][j]=P[i][k];}}}4.3 迪杰斯特拉Dijkstra()迪杰斯特拉算法对求一个顶到到其他所有顶点的路径较优。

初始时,S中只包含原点,顶点v到自己的距离为0,D中包含出v外的其他顶点,v到D中顶点u的距离为边上的权值。

从D中选取一个顶点k,顶点v到顶点k的距离最小,然后把顶点k加入到S中,该选定的距离就是v到k的最短路径长度。

以顶点k为新考虑的中间点,修改顶点v到U中各顶点的距离,若从原点v到顶点u的距离比原来的距离(不经过k)的距离看,短,则修改顶点u的距离值,修改后的距离值为顶点v到顶点k的距离加上边<k,u>上的权。

迪杰斯特拉的算法:D2[v1]=0;S[v1]=1; //原点编号放入s中for(i=2;i<n;i++){ min=IDF;for(w=1;w<=n;w++)if(!S[w]&&D2[w]<min){v=w;min=D2[w];}S[v]=1; //修改顶点u放入s中for(w=1;w<=n;w++)if(!S[w]&&(D2[v]+G->arcs[v][w]<D2[w])){D2[w]=D2[v]+G->arcs[v][w];P2[w]=v;}}4.4 主要函数流程图及其函数调用4.4.1 主要函数流程图图4-4-1 主要函数流程图4.4.2 一个城市到其他城市的路径调用4-4-2 调用dijkstra()4.4.3 任意两个城市之间路径调用4-4-3 调用floyd()5 运行与测试求有向图的最短路径:如图5 所示的有向图,求顶点a到其余顶点的最短路径;分别求顶点b到顶点d之间以及顶点a到顶点d的最短路径。

相关文档
最新文档