校园导游咨询系统设计.doc

上传人:精*** 文档编号:1036080 上传时间:2024-03-27 格式:DOC 页数:31 大小:533.50KB
下载 相关 举报
校园导游咨询系统设计.doc_第1页
第1页 / 共31页
校园导游咨询系统设计.doc_第2页
第2页 / 共31页
校园导游咨询系统设计.doc_第3页
第3页 / 共31页
校园导游咨询系统设计.doc_第4页
第4页 / 共31页
校园导游咨询系统设计.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、校园导游咨询 【摘 要】随着高校校园的逐渐扩建,来访校园的各界人士逐渐增多,为了提高学校的知名度,需要给来访者提供校园景点信息查询服务,利用计算机建立一个自动的导游系统可以很好的解决这个问题,此系统的咨询过程为:当客人来访时,系统能根据用户指定的景点提供相关的信息,并能提供任意景点间的问路查询,即根据给定的起点和终点,查询两者之间的一条最短的简单路径。 本系统设计侧重于软件工程规范的分析、设计及测试,采用了结构化程序设计思想,通过功能模块分级实现系统功能。 【关键词】校园导游 Dijkstra算法 Java 数据库 Campus Guide Consulting 【Abstract】With

2、the gradual expansion of campus, visiting the campus community have gradually increased, in order to enhance the schools reputation, need to provide campus visitors attractions information inquiry service, a computer automatic tour guide system can solve this problem, this The consultation process f

3、or the system: When guests visit, the system according to user-specified sites provide relevant information, and can provide any attractions between the query to ask the way, that according to the given start and end, between a query the shortest simple path. The system design focuses on the analysi

4、s of software engineering specification, design and testing, using a structured programming ideas, through the functional module classification system functions.【key words】Campus Guide Dijkstra algorithm java Database目 录绪论11问题描述21.1题目内容21.2研究背景21.3研究思路21.4技术介绍21.4.1 Java简介21.4.2 Swing简介41.4.3 Dijkst

5、ra算法51.5数据要求61.5.1定义无向网的存储方式为邻接表61.5.2用Dijkstra算法计算出任意两点间最短距离的思路72分析与设计82.1功能描述82.2 程序流程图的设计82.2.1 Dijkstra算法82.2.2 数据库插入92.3 数据库结构描述102.3.1 数据库设计102.3.2 设置数据源102.4 测试数据及期望结果102.4.1 地图显示102.4.2 节点信息查询102.4.3 任意两个节点之间最短路径及距离查询112.4.4 将查询结果存储到数据库112.4.5 浏览历史记录112.5 模块结果及各个模块实现方式描述122.5.1 地图显示122.5.2 节

6、点信息查询132.5.3 任意两个节点之间最短路径及距离查询142.5.4 将查询结果存储到数据库152.5.5 浏览历史记录152.5.6界面显示163源代码选摘183.1 地图显示183.2 Dijkstra算法实现183.3 最短路径查询结果插入数据库243.4 历史记录查询25结论27参考文献29致 谢3029绪论 建院四年来,我们锦江学院各项工作开展迅速,正朝着建设现代大学方向迈进。现代大学的一个突出特点就是具有开放性。开放,就意味着对外交流日益增多。为了方便来访者参观、办事,同时提高学院的知名度,我们有必要设计一个界面简洁美观、功能齐全、操作方便的校园导游咨询系统。目前流行的导游系

7、统,多存在以下几大严重问题: (1)侧重于多媒体的演示 ,虽然界面丰富 ,但缺少景点间的地理位置的分析和应用。 (2)即使使用地图来说明景点间的相对位置关系 ,但无法选择景点间的最短路径和求景点间最短距离 。 (3)即使使用电子地图 ,能进行简单的整体放大 、缩小 、移动操作 ,但对局部的地理区域 、地理对象的操作 ,如景点的查询等 ,则难以完成 ,因此缺少了灵活性。根据以上缺陷 ,我将以程序化的语言来编译一个校园导游系统 ,其主要实现地图显示、景点信息查询、及任意两点间最短路径以及距离的查询。此外,我还将建立数据库,把查询结果完整保存,并可随时查询历史记录。该系统主要针对旅游者来设计 ,系统

8、界面友好 ,简单易用。 1问题描述1.1题目内容1功能描述:设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示学校各景点,存放景点名称,代号,简介等信息;以边表示路径,存放路径长度等相关信息。2为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。3为来访客人提供图中任意景点相关信息的查询。1.2研究背景随着高校校园的逐渐扩展,校园透明度的逐渐提高,来访校园的人士逐渐增多,以前封闭或者半封闭的校园状况随之改变,派生出它积极的迎接挑战的状态。高校校园旅游在掀起“羞答答的头盖”后 ,正悄然走向市场,一个完整的校园导游系统必不可少。它具有很强的实用性,可以作为

9、一种校园旅游的导游业务管理系统,更是可以用作校园介绍。它将是一个校园的第一招牌。1.3研究思路我采用结构化程序设计思想,通过功能模块分级实现其功能。我们的系统功能模块主要由地图显示、节点信息查询、任意两个节点间的最短路径及距离查询、最短路径查询结果保存到数据库、查询历史记录五大部分组成 ,它们能基本满足游客对校园景点信息查询的需要。将锦江学院校园平面图抽象为一个无向带权图 ;其次 ,选择最短路径算法,我采用Dijkstra算法,它可方便的求出从始点到终点的最短路劲,且它的时间复杂度比较低。1.4技术介绍1.4.1 Java简介 Java,是由Sun Microsystems公司于1995年5月

10、推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。 Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平

11、台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。 Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。Java分为三个体系JavaSE(Java2 Platform Standard Edition,java平台标准版),JavaEE(Java 2 Platform,Enterprise Edition,java平台企业版),JavaME(Java 2 Platform Micro Edition,java平台微型版)。Java主要特性1、Ja

12、va语言是简单的。Java语言的语法与C语言和C+语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C+ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C+ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面

13、向对象程序设计语言。3、Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。4、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。5、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安

14、全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。6、Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。7、Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格

15、规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。8、Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。9、Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C+。10、Java语言是多线程的

16、。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。11、Java语言是动态的。J

17、ava语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子

18、商务应用系统提供了有关技术和丰富的类库。1.4.2 Swing简介Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。AWT是Swing的基础,而Swing是AWT的改进。Swing产生的主要原因就是AWT不能满足图形化用户界面发展的需要。AWT设计的初衷是支持开发小应用程序的简单用户界面。AWT缺少剪贴板、打印支持、键盘导航等特性;AWT功能较弱,它甚至不包括弹出式菜单或滚动窗格等基本元素。此外,AWT

19、体系结构还存在着其他一些严重的缺陷。Swing组件几乎都是轻量级组件,与AWT相对的重量级组件相比,Swing没有本地的对等组件,不像重量级组件那样要在它们自己本地的不透明窗体中绘制,轻量级组件会在它们的重量级组件的窗口中绘制。Swing的体系结构,见图1.1: 图1.1Swing的主要特性:1. Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级(light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此,Swing比AWT组件具有更强的实用性。Swing在不同的

20、平台上表现一致,并且有能力提供本地窗口系统不支持的其他特性。2. Swing采用了一种MVC的设计范式,即“模型-视图-控制器”(Model-View-Controller),其中,模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。3. Swing采用可插入的外观感觉(Pluggable Look and Feel,PL&F)。相对而言,在AWT组件中,由于控制组件外观的对等类与具体平台相关,使得AWT组件总是只有与本机相关的外观。而Swing使得程序在一个平台上运行时能够有不同的外观,用户可以选择自己习惯的外观。1.4.3 Dijkstra算法 Dijkstra(迪杰斯特拉)算法是

21、典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表的方式。注意该算法要求图中不存在负权回路。1.5数据要求1.5.1定义无向网的存储方式为邻接表在邻接表中,对网中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对有向网是以顶点vi为尾的弧)。每个结点由三个域组成,其中邻接点域(adj

22、vex)指示与顶点vi邻接的点在网中的位置,链域(nextarc)指示下一条边或弧的结点;数据域(info)存储和边或弧相关的信息,如权值等。每个链表上附设一个表头结点,包含链域(firstarc)指向链表中第一个结点,还设有存储顶点vi的名或其它有关信息的数据域(data)。如: 表节点 adjvexnextarcinfo 头节点datafirstarc方法如下:public class GraphAdjList /类GraphAdjList的每一个对象对应一个结点的邻接链表。 NextAdjNode firstNode = null; /与此结点邻接的第一个结点信息。 public Gra

23、phAdjList(NextAdjNode first) /通过传送一个与此结点邻接的第一个结点来构造此结点的邻接链表。 firstNode = first; /与此结点邻接的第一个结点。 class NextAdjNode /网中对应于此结点所在邻接链表表头结点的邻接结点的信息。 int nodeNum; /邻接结点的索引。 int edgeWeight; /结点与其邻接结点之间的边的权值。 NextAdjNode nextNode = null; /结点所在邻接链表中的下一个邻接结点及其信息。 public NextAdjNode(int node, int weight) /通过邻接结点

24、的索引及其与所在邻接链表表头结点之间的边的权值来构造一个新的邻接结点对象。 nodeNum = node; /邻接结点索引。 edgeWeight = weight; /邻接结点与所在邻接链表表头结点之间的边的权值。 1.5.2用Dijkstra算法计算出任意两点间最短距离的思路 假设每个点都有一对标号 (dj, pj),其中dj是从起源点s到点j的最短路径的长度 (从顶点到其本身的最短路径是零路(没有弧的路),其长度等于零);pj则是从s到j的最短路径中j点的前一点。求解从起源点s到点j的最短路径算法的基本过程如下:1.初始化。起源点设置为: ds=0, ps为空; 所有其他点: di=,

25、pi=?; 标记起源点s,记k=s,其他所有点设为未标记的。2.检验从所有已标记的点k到其直接连接的未标记的点j的距离,并设置: dj=mindj, dk+lkj 式中,lkj是从点k到j的直接连接距离。3.选取下一个点。从所有未标记的结点中,选取dj 中最小的一个i: di=mindj, 所有未标记的点j 点i就被选为最短路径中的一点,并设为已标记的。4.找到点i的前一点。从已标记的点中找到直接连接到点i的点j*,作为前一点,设置: i=j*5.标记点i。如果所有点已标记,则算法完全推出,否则,记k=i,转到2) 再继续。2分析与设计2.1功能描述1.地图显示:将川大锦江院的平面图输出到电脑

26、屏幕上的相应区域。 2.节点信息查询:选择任意节点时将任意节点信息输出到电脑屏幕上的相应区域。 3.任意两个节点之间最短路径及距离查询:通过选择起始节点和目标节点,查询任意两个节点之间的最短路径及距离。结果输出到屏幕相应区域。4.将查询结果存储到数据库:将每次查询的结果存储到数据库中。5.浏览历史记录:将数据库中的历史记录输出到屏幕的相应区域。2.2 程序流程图的设计2.2.1 Dijkstra算法调用迪杰斯特拉算法Dijkstra初始化带权长度dv设空路径pvw初始化v0顶点属于s集iG.vexnu其余顶点离v0最近vv加到s集更新当前最短路径及距离i+结束2.2.2 数据库插入开始数据库是

27、否为空将数据编号设为1查询当前最大编号编号=最大编号+1插入数据2.3 数据库结构描述本程序采用JDBC访问Access数据库。建立连接的方式通过JDBC-ODBC桥接器。2.3.1 数据库设计查询结果分为以下四项:编号(No),起始位置(Origin),目标位置(Destination),查询结果(Result)。存在以下函数依赖关系:F NoOrigin,NoDestination,NoResult 候选码:No故将No设置为主码。建立Access数据库result.mdb,数据库名称为result,建立数据表result,设计如图2.1:图2.1(说明:No的值唯一,并且不能为空。No设

28、为文本的原因是为了便于插入和输出。)2.3.2 设置数据源1.打开Windows控制面板,双击“管理工具”,双击数据源(ODBC)。 2.在“用户数据源(U)”一项中点击“添加”按钮。在弹出窗口中选择“Microsoft Access Driver (*.mdb)”,点击“完成”。3.将“数据源名(N)”设置为:result,点击“选择(S)”添加数据库路径,点击“确定”,点击“确定”退出设置窗口。2.4 测试数据及期望结果2.4.1 地图显示 输出川大锦江学院平面图。2.4.2 节点信息查询在“Introduction”项中选择节点5,输出:商业中心;又选择节点10,输出:食堂。2.4.3

29、任意两个节点之间最短路径及距离查询 1.最短路径距离为0的情况:在“Path”项中选择起始位置0,目标位置0,输出最短路径:正门 ,距离:0;又选择起始位置8,目标位置8,输出最短路径:男生公寓 ,距离:0。2.只有一条最短路径的情况:在“Path”项中选择起始位置0,目标位置6,输出最短路径:正门 篮球场 ,距离:10;又选择起始位置0,目标位置3,输出最短路径:正门 足球场 活动中心 图书馆 教学楼 ,距离:58。3.最短路径多于一条的情况:(本图无此情况,故无法列举数据。) 2.4.4 将查询结果存储到数据库1.添加第一条记录:将2.4.3的第一条查询结果添加到数据库result的数据表

30、result中,No=“9”,Origin=“正门”,Destination=“正门”,Result=“最短路径:正门,距离:0”;又No=“8”,Origin=“男生公寓”,Destination=“男生公寓”,Result=“最短路径:男生公寓,距离:0”。2.添加第三条记录:将2.4.3的第三条查询添加到数据库result的数据表result中,No=“5”,Origin=“正门”,Destination=“篮球场”,Result=“最短路径:正门 篮球场,距离:10”;又No=“6”,Origin=“正门”,Destination=“教学楼”,Result=“最短路径:正门 足球场 活

31、动中心 图书馆 教学楼,距离:58”。3.添加第五条记录:(本图无此情况,故无法添加数据。)2.4.5 浏览历史记录将数据库里存储的五条历史记录输出,格式如下:历史记录:起始位置:正门目标位置:正门最短路径:正门 距离:0起始位置:男生公寓目标位置:男生公寓最短路径:男生公寓 距离:0起始位置:正门目标位置:篮球场最短路径:正门 篮球场 距离:10起始位置:正门目标位置:教学楼最短路径:正门 足球场 活动中心 图书馆 教学楼 食堂 距离:58(本图无多于一条最短路径情况,无记录)2.5 模块结果及各个模块实现方式描述2.5.1 地图显示 由于本实例中的对象川大锦江学院平面图信息固定,所以可以用

32、Photoshop CS2绘制好川大锦江学院平面图map.gif。然后,通过调用Java.awt包中的抽象类Toolkit的getImage(String s)方法将map.gif插入到内存中,并通过画布类Imagecanvas的paint()方法绘制图象。最后将Imagecanvas的实例canvas添加到窗口类Window中。测试结果如下图2.2:图2.22.5.2 节点信息查询1.GUI实现:用类Label的对象l1和l2插入文本提示标签,添加Choice c1,Button b1,TextArea intro,并将它们添加到Panel p1中。将p1添加到Window中。2.功能实现:

33、在函数Introducation()中,通过对象c1的方法getSelectedItem()返回当前c1的数值,用switch语句获取对应的节点信息文字内容,并输出到intro中。测试结果如下图2.3、图2.4:图2.3图2.42.5.3 任意两个节点之间最短路径及距离查询1.GUI实现:用类Label的对象l3、l4和l5插入文本提示标签,添加Choice c2、c3,Button b2,TextArea sp,并将它们添加到Panel p3中,将p3添加到p6中。将p6添加到Window中。2.功能实现:在函数path()中,通过对象c2、c3的方法getSelectedItem()返回当

34、前的起始位置信息source、目标位置信息target,并转换成整型变量st、de。通过从文本文件Graph.txt调用GraphFromFile的对象graph,生成无向网的邻接表。通过graph.getList(),de,st调用类Dijkstra对象shortpath,用shortpath.getPath ()和shortpath.getDistance()返回最短路径及距离。用switch语句获取对应的文字信息,并输出到sp中。测试结果如下图2.5、图2.6、图2.7、图2.8:最短路径距离为0的情况:图2.5图2.6只有一条最短路径的情况:图2.7图2.8最短路径多于一条的情况:(本

35、图无此情况,故无此测试结果)查询结果合成图:(本图无此情况,故无此测试结果)2.5.4 将查询结果存储到数据库在函数update()中,用switch语句获取起点位置和目标位置的文字信息,sp.getText()获取查询结果。通过JDBC-ODBC桥接器建立与数据库result的连接。查询主键No的当前最大值Max,如果Max为空,则将新添加记录的No值设置为1,如果Max不为空,则将新添加的记录的No值设为Max+1,并通过Statement对象调用方法executeUpdate()将数据插入到表result中。测试结果如下图2.9:图2.92.5.5 浏览历史记录1.GUI实现:添加But

36、ton b3,TextArea his,并将它们添加到Panel p5中,将p5添加到p6中。将p6添加到Window中。2.功能实现:在函数showhis()中,通过JDBC-ODBC桥接器建立与数据库result的连接。使用Statement对象调用方法executeQuery()查询所有数据,并将查询结果存储到ResultSet对象中。用while语句将查询结果逐条输出到输出到his。测试结果如下图2.10、图2.11、图2.12:图2.10图2.11图2.122.5.6界面显示 界面截图如下图2.13:图2.133源代码选摘3.1 地图显示class Imagecanvas exten

37、ds Canvas /定义画布Imagecanvas,用于在程序中插入map.gif这幅图象。Toolkit tool; Image myimage; Imagecanvas() setSize(584,480); tool=getToolkit(); /得到一个Toolkit对象。 myimage=tool.getImage(CampusGuide.class.getResource()+map.gif).split(file:/)1); /由tool负责获取图像 public void paint(Graphics g) g.drawImage(myimage,3,3,myimage.ge

38、tWidth(this),myimage.getHeight(this),this); 3.2 Dijkstra算法实现public int getPath() /返回所求结点间最短路径子图,用二维数组表示,每一行表示一条最短路径。 /用深度优先法从前驱表中求出每条最短路径。 PreNodes temp = preNodestargetNode; Vector stack = new Vector(); boolean firstTime = true; Vector v = new Vector(); v.add(new Integer(targetNode); String allPath

39、Temp = new String(); int pathNum = 0; while (!stack.isEmpty() | firstTime) if (!firstTime) Integer branchNode = (Integer)(stack.remove(stack.size()-1); /branchNode用于表示上一次路径分支点的那个节点的节点号。 temp = (PreNodes)stack.remove(stack.size()-1); /分支节点的节点前驱信息。 int i = v.indexOf(branchNode); /在上一条最短路径中,将在分支点以后的节点号

40、删除。 for (int j = v.size(); i j; j-) v.remove(j-1); while (Integer)v.get(v.size()-1).intValue() != sourceNode) /找一条最短路径。 v.add(new Integer(temp.preNode); if (temp.anotherPreNode != null) stack.add(temp.anotherPreNode); stack.add(new Integer(temp.preNode); temp = preNodestemp.preNode; for (int i = 0;

41、i v.size(); i+) /将求得的最短路径按0d1dt2d3d4dt的形式存放在allPathTemp中,d表示每条最短路径内每个节点的分隔符,t表示各条最短路径的分隔符。 allPathTemp += (Integer)(v.get(i).toString() + d); allPathTemp += t; pathNum+; firstTime = false; int path = new intpathNum; /存放所有最短路径的数组。 String pathTemp = new StringpathNum; /以2d3d4dt的形式存放一条最短路径的数组。等待进一步解析。

42、pathTemp = filterAllPathTemp(allPathTemp, pathNum); /第一步解析,根据t将各条最短路径分开。 for (int i = 0; i pathNum; i+) pathi = filterPathTemp(pathTempi); /第二步解析,根据d将每条最短路径内的各个结点分开。 return path; private String filterAllPathTemp(String path, int num) /第一步解析,根据t将各条最短路径分开。 StringTokenizer st = new StringTokenizer(path

43、, t); String pathTemp = new Stringnum; for (int i = 0; i num; i+) pathTempi = st.nextToken(); return pathTemp; private int filterPathTemp(String pathTemp) /第二步解析,根据d将每条最短路径内的各个结点分开。 StringTokenizer st = new StringTokenizer(pathTemp, d); int nodeNum = 0; try while (true) st.nextToken(); nodeNum+; cat

44、ch (Exception e) st = new StringTokenizer(pathTemp, d); int path = new intnodeNum; for (int i = 0; i nodeNum; i+) pathi = Integer.parseInt(st.nextToken(); return path; public void go(int s, int t) setST(s, t); go(); public void go() int distanceTemp = new inttotalNodeNum; for (int i = 0; i totalNodeNum; i+) /初始时将从源结点到其他各个结点的最短路径长度全都设置为无穷远。除源结点到自身的长度为0。 distanceTempi = 0X0FFFFFFF; distanceTempsourceNode = 0; /根据图的邻接表具有的信息,将于源结点邻接的结点的路径长度设置为边的权值,其余不变,作为长度初始值。 NextAdjNode temp = null; temp = graphAdjListsourceNode.firstNode; distanceTemp

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922