图论在实际生活中的应用

合集下载

图论及其应用

图论及其应用

图论及其应用简介图论是计算机科学中的一个重要分支,研究的对象是由边与顶点组成的图形结构以及与其相关的问题和算法。

图论的应用广泛,涵盖了计算机科学、网络科学、物理学、社会学、生物学等多个领域。

本文将介绍图论的基本概念、常用算法以及一些实际的应用案例。

图的基本概念图由顶点(Vertex)和边(Edge)组成,记作G=(V, E),其中V为顶点的集合,E为边的集合。

图可以分为有向图和无向图两种类型。

有向图有向图中的边具有方向性,即从一个顶点到另一个顶点的边有明确的起点和终点。

有向图可以表示一种有序的关系,比如A到B有一条边,但B到A可能没有边。

有向图的表示可以用邻接矩阵或邻接表来表示。

无向图无向图中的边没有方向性,任意两个顶点之间都有相互连接的边。

无向图可以表示一种无序的关系,比如A与B有一条边,那么B与A之间也有一条边。

无向图的表示通常使用邻接矩阵或邻接表。

常用图论算法图论中有许多经典的算法,其中一些常用的算法包括:深度优先搜索(DFS)深度优先搜索是一种用于遍历或搜索图的算法。

通过从起始顶点开始,沿着一条路径尽可能深入图中的顶点,直到无法再继续前进时,返回上一个顶点并尝试下一条路径的方式。

DFS可以用于判断图是否连通,寻找路径以及检测环等。

广度优先搜索(BFS)广度优先搜索也是一种用于遍历或搜索图的算法。

不同于深度优先搜索,广度优先搜索逐层遍历顶点,先访问离起始顶点最近的顶点,然后依次访问与起始顶点距离为2的顶点,以此类推。

BFS可以用于寻找最短路径、搜索最近的节点等。

最短路径算法最短路径算法用于计算图中两个顶点之间的最短路径。

其中最著名的算法是迪杰斯特拉算法(Dijkstra’s A lgorithm)和弗洛伊德算法(Floyd’s Algorithm)。

迪杰斯特拉算法适用于没有负权边的图,而弗洛伊德算法可以处理带有负权边的图。

最小生成树算法最小生成树算法用于找到一个连通图的最小的生成树。

其中最常用的算法是普里姆算法(Prim’s Algorithm)和克鲁斯卡尔算法(Kruskal’s Algorithm)。

图论思想在生活中的运用

图论思想在生活中的运用

图论思想在生活中的运用
图论思想在生活中的应用很多,例如:
1、交通出行:在城市的出行,经常会用到从一个地点到另一地点的最短路径,而解决此问题最好的方法就是使用图论,用最短路径算法来找到最优路线,比如驾车、打车、乘地铁等都会使用图论来算出最短路径。

2、网络传输:现在的互联网系统都是使用图论的方法来进行网络传输。

当多台计算机连接到网络时,都会形成一个图,通过图论,可以找到最佳的传输路径,以优化路径走向,从而提高网络的传输速度。

3、调度系统:调度系统中的人员调度及运输路线调度,也是依靠图论思想。

人员调度时,可以建立一个移动关系图,找到每一步最短路径,从而得到最佳的调动方案;而运输路线则可通过最短路线算法,计算出从一个点到另一点最短的路径,从而达到节约时间,提高工作效率的效果。

4、信息检索:在海量数据的环境下检索合适的信息,也是利用图论来解决的。

例如搜索引擎,会建立一个链接关系图,根据各页面间的链接关系来确定最优的信息检索结果。

图论的基本概念和应用

图论的基本概念和应用

图论的基本概念和应用图论是数学中的一个重要分支,研究的是图的性质和图之间的关系。

图论在计算机科学、网络科学、运筹学等领域有着广泛的应用。

本文将介绍图论的基本概念和一些常见的应用。

图的定义图是由节点(顶点)和边组成的一种数据结构。

节点表示对象,边表示对象之间的关系。

图可以分为有向图和无向图两种类型。

有向图有向图中,边是有方向的,表示从一个节点到另一个节点的关系。

如果从节点A到节点B存在一条边,那么我们称节点A指向节点B。

无向图无向图中,边是没有方向的,表示两个节点之间的关系。

如果两个节点之间存在一条边,那么我们称这两个节点是相邻的。

图的表示方法图可以用多种方式进行表示,常见的有邻接矩阵和邻接表两种方法。

邻接矩阵邻接矩阵是一个二维数组,其中行和列分别表示图中的节点,数组元素表示节点之间是否存在边。

如果节点i和节点j之间存在边,则邻接矩阵中第i行第j列的元素为1,否则为0。

邻接表邻接表是一种链表的形式,其中每个节点都有一个链表,链表中存储了与该节点相邻的节点。

邻接表更加节省空间,适用于稀疏图。

图的遍历图的遍历是指从图中的某个节点出发,按照一定规则依次访问图中的所有节点。

常见的图遍历算法有深度优先搜索(DFS)和广度优先搜索(BFS)。

深度优先搜索(DFS)深度优先搜索是一种递归的遍历算法,从起始节点开始,沿着一条路径尽可能深入地访问图中的节点,直到无法继续深入为止,然后回溯到上一个节点,继续访问其他未被访问过的节点。

广度优先搜索(BFS)广度优先搜索是一种非递归的遍历算法,从起始节点开始,按照距离起始节点的距离逐层访问图中的节点。

首先访问起始节点,然后访问与起始节点相邻的所有节点,再访问与这些相邻节点相邻的所有未被访问过的节点,以此类推。

图的应用图论在许多领域都有着广泛的应用,下面介绍几个常见的应用场景。

社交网络分析社交网络是一个典型的图结构,其中节点表示用户,边表示用户之间的关系。

通过对社交网络进行图论分析,可以研究用户之间的关系、社区发现、信息传播等问题。

网络科学中的图论与复杂网络

网络科学中的图论与复杂网络

网络科学中的图论与复杂网络网络科学是研究网络结构和网络行为的学科,而图论和复杂网络是网络科学中的重要分支。

图论是一门数学学科,研究图及其性质,而复杂网络则是研究由大量节点和边连接而成的网络。

本文将探讨网络科学中的图论与复杂网络,并探讨它们在现实生活中的应用。

一、图论图论是研究图及其性质的数学学科。

图由节点和边组成,节点代表网络中的个体,边代表节点之间的连接。

图论主要研究图的结构、性质和算法等问题。

1. 图的基本概念在图论中,有一些基本概念需要了解。

首先是无向图和有向图。

无向图中的边没有方向,而有向图中的边有方向。

其次是度数,度数指的是与一个节点相连的边的数量。

还有连通性,如果在一个图中,任意两个节点之间都存在路径,则称该图是连通的。

2. 图的算法图论中有许多重要的算法,如最短路径算法、最小生成树算法和最大流算法等。

最短路径算法用于寻找两个节点之间最短的路径,最小生成树算法用于寻找一个连通图的最小生成树,最大流算法用于计算网络中最大的流量。

3. 图的应用图论在现实生活中有着广泛的应用。

例如,社交网络可以用图来表示,节点代表人,边代表人与人之间的关系。

通过分析社交网络的结构,可以研究社交网络中的信息传播、影响力传播等问题。

此外,图论还可以应用于交通网络、电力网络和物流网络等领域。

二、复杂网络复杂网络是由大量节点和边连接而成的网络。

与传统的简单网络不同,复杂网络具有许多独特的性质,如小世界效应、无标度性和社区结构等。

1. 小世界效应小世界效应是指在复杂网络中,任意两个节点之间的距离很短。

也就是说,通过很少的步骤,就可以从一个节点到达另一个节点。

这一性质在社交网络中尤为明显,因为人与人之间的联系往往通过共同的朋友来实现。

2. 无标度性无标度性是指复杂网络中节点的度数呈幂律分布。

也就是说,只有少数节点具有非常高的度数,而大部分节点的度数相对较低。

这种性质在许多现实网络中都存在,如互联网、社交网络和蛋白质相互作用网络等。

图论模型在实际中的应用

图论模型在实际中的应用

还剩下最后一步:求b0,b1,b2…bl1-1,也就是每个集合中的最小元 事实上,每一个能被拼出来的木棍长度x,都是从0开始,用已有的小木棍拼出来的。那么就可以把集 合的编号看做顶点,小木棍的长度看边的长度,建立一个图。对于每个点i(集合i),都连出n条边,长 度为L1,L2…Ln。对于长度为Lk的边,连向编号为(i+Lk) mod L1的顶点。
算法描述
• 一次将扩展出多个顶点,用最小值堆保存
• 初始: 起点对应的节点S入堆;并赋予标志信息Time(S)=0
• 取堆顶,对此定点,逐一枚举所有不用换乘就能到达的顶点,更新堆中对应点的标志信息.
• 不断重复取堆顶的过程,直到取出的顶点为最终目标T

Time(T)即为所求
举例说明算法步骤
c
12
主要内容
• 建模的方法和步骤 ——汪瑜婧
• 图论模型的建立
——罗睿辞
• 图论模型的选择和关系的简化
• 其它数学模型举例
——王尧
——雷涛
建模的方法和步骤
• 模型准备 • 模型假设 • 模型的建立 • 模型求解与分析 • 模型检验 • 模型应用
问题的提出
• 2007CUMCM B题 乘公交,看奥运 • 给定若干条公交线路,以及在每条公交线路中任意相邻的两站之间所花费的时间。 • 并且给定乘客在任意站点换乘的耗时 • 要求给出任意两公汽站点之间线路选择问题的一般数学模型与算法,求出最佳的公交线路.
罗贯中
廖睿辞
罗纳尔多
罗纳尔多是罗贯中的独生子,去掉他们 2个,树依然连通
廖睿辞
罗纳尔多 廖睿辞
廖睿辞依然是罗睿辞的独生子,将它们 分成一组
得到了一个最优解
贪心构造 • 1、若叶子结点是父亲的独生子,则删去它们2个,树依然保持性质 • 2、若父亲结点有2个孩子

图论在实际生活中的应用

图论在实际生活中的应用

摘要寻找最短的路径到达想要去的地方在这个快节奏的时代已经变得越来越重要,它对于节约人们的时间成本具有重要意义。

当前城市的规模越来越大,交通道路状况也越来越复杂,从一个地方到另一个地方可能有很多种路径,如何从众多的路径中选择距离最短或者所需时间最短的路径便成了人们关注的热点。

能够选择出一条最符合条件的路径会给我们的日常生活带来极大地方便。

本文就通过找重庆邮电大学几个代表性地点之间寻找最短距离路径为例,介绍经典的最短路径算法Floyd算法及其算法的实现。

关键字:最优路径,Floyd算法,寻路一、图论的基本知识图论起源于举世闻名的柯尼斯堡七桥问题。

在柯尼斯堡的普莱格尔河上面有七座桥将河中的岛及岛与河岸是连接起来的,有一个问题是要从这四块陆地中任何一块开始,通过每一座桥而且正好只能一次,再回到起点。

然而许多人经过无数次的尝试都没有成功。

在1736年欧拉神奇般的解决了这个问题,他用抽像分析法将这个问题化为第一个图论问题:即用点来代替每一块陆地,将每一座桥用联接相应的两个点的一条线来代替,所以相当于得到一个“图”(如下图)。

柯尼斯堡七桥图桥转换成图欧拉证明了这个问题是没有解的,并且推广了这个问题,给出了对于一个给定的图可以某种方式走遍的判定法则。

这项工作使得欧拉成为图论〔及拓扑学〕的创始人。

图论其实也是一门应用数学,它的概念和结果来源非常广泛,既有来自生产实践的问题,也有来自理论研究的问题。

它具有以下特点:蕴含了丰富的思想、漂亮的图形以及巧妙的证明;涉及的问题很多而且广泛,问题外表简单朴素,本质上却十分复杂深刻;解决问题的方法是千变万化,非常灵活,常常是一种问题就有一种解法。

图论研究的内容非常广泛,如图的连通性、遍历性、图的计数、图的着色、图的极值问题、图的可平面性等。

历史上参与研究图论问题的人既有许多天才的数学家,也有不少的业余爱好者。

那么什么是图论中的图呢?在日常生活、生产活动以及科学研究中,人们常用点表示事物,用点与点之间是否有连线表示事物之间是否是有某种关系,这样构成的图形就是图论中的图。

利用图论解决优化问题

利用图论解决优化问题

利用图论解决优化问题
图论是一种数学领域,研究的对象是图。

图是由节点和边构成的一种数学结构,可以用来描述不同事物之间的关系。

在实际应用中,图论被广泛应用于解决各种优化问题。

一、最短路径问题
最短路径问题是图论中的经典问题之一。

通过图论的方法,可以很容易地找到两个节点之间最短路径的长度。

这在现实生活中经常用于规划交通路线、通讯网络等方面。

二、最小生成树问题
最小生成树问题是指在一个连通加权图中找到一个权值最小的生成树。

利用图论的方法,可以高效解决这个问题,从而在一些应用中节省资源和成本。

三、网络流问题
网络流问题是指在网络中找到从源点到汇点的最大流量。

通过图论中流网络的模型,可以有效地解决网络流问题,这在交通调度、物流运输等领域有着重要的应用。

四、最大匹配问题
最大匹配问题是指在一个二分图中找到最大的匹配数。

图论提供了有效的算法来解决最大匹配问题,这在稳定婚姻问题、任务分配等方面有着广泛应用。

五、旅行商问题
旅行商问题是一个著名的优化问题,即求解访问所有节点一次并回到起点的最短路径。

通过图论的技术,可以找到最优解,帮助旅行商节省时间和成本。

总的来说,图论在解决优化问题方面有着重要的作用。

通过构建合适的图模型,并应用相关算法,可以高效地解决各种优化问题,为现实生活中的决策提供科学依据。

希望未来能有更多的研究和应用将图论与优化问题相结合,为人类社会的发展贡献力量。

图论在生活中的几个应用

图论在生活中的几个应用

图论在生活中的几个应用
图论是一种研究计算机算法和程序部署的数学方法。

近年来,随着计算机科学技术的发展,图论在生活中也越来越多地发挥着重要的作用。

下面就来看看图论在生活中的几个应用。

首先,计算机网络的管理是由图论来解决的。

我们经常会遇到这样的问题:如何在复杂的计算机网络中规划路由?答案正是图论解决方案的存在,当我们把计算机网络的每个节点画成一幅图形时,这些图形就可以表示一个完整的系统,并且可以确定路由的最优解决方案。

其次,搜索引擎中也使用了图论。

在搜索引擎内部,索引系统负责索引网络中的所有网页,并且必须保证搜索结果的准确性和可用性。

在处理这种巨大的网络索引系统时,图论可以帮助我们更高效地处理大量网页,从而精确地搜索按关键字查找所需的信息。

此外,图论也可用于最优化汽车的路径规划。

目前,许多智能小车都采用智能图论方法,通过分析图形关系及现有环境条件来建立最优路径,帮助汽车灵活避开拥堵路段,尽快到达目的地,同时也能帮助汽车有效防止盗窃。

最后,在社交网络中,图论也深受用户的喜爱。

图论技术可以帮助分析社交网络中的每条关系,找出影响用户行为的因素,从而得出最佳的社交推广结果,利用图论的算法让我们可以更准确地聚焦受众群体,提高推广和宣传的效果。

总之,如今我们日常生活中已经充分发挥着图论技术的优势,如计算机网络管理、搜索引擎技术、智能出行路径规划以及社交网络等,图论无疑成为当今社会技术化发展的重要一环。

它促进了数字通信的发展,对科技的发展发挥了巨大的作用。

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

摘要寻找最短的路径到达想要去的地方在这个快节奏的时代已经变得越来越重要,它对于节约人们的时间成本具有重要意义。

当前城市的规模越来越大,交通道路状况也越来越复杂,从一个地方到另一个地方可能有很多种路径,如何从众多的路径中选择距离最短或者所需时间最短的路径便成了人们关注的热点。

能够选择出一条最符合条件的路径会给我们的日常生活带来极大地方便。

本文就通过找重庆邮电大学几个代表性地点之间寻找最短距离路径为例,介绍经典的最短路径算法Floyd算法及其算法的实现。

关键字:最优路径,Floyd算法,寻路一、图论的基本知识图论起源于举世闻名的柯尼斯堡七桥问题。

在柯尼斯堡的普莱格尔河上面有七座桥将河中的岛及岛与河岸是连接起来的,有一个问题是要从这四块陆地中任何一块开始,通过每一座桥而且正好只能一次,再回到起点。

然而许多人经过无数次的尝试都没有成功。

在1736年欧拉神奇般的解决了这个问题,他用抽像分析法将这个问题化为第一个图论问题:即用点来代替每一块陆地,将每一座桥用联接相应的两个点的一条线来代替,所以相当于得到一个“图”(如下图)。

柯尼斯堡七桥图桥转换成图欧拉证明了这个问题是没有解的,并且推广了这个问题,给出了对于一个给定的图可以某种方式走遍的判定法则。

这项工作使得欧拉成为图论〔及拓扑学〕的创始人。

图论其实也是一门应用数学,它的概念和结果来源非常广泛,既有来自生产实践的问题,也有来自理论研究的问题。

它具有以下特点:蕴含了丰富的思想、漂亮的图形以及巧妙的证明;涉及的问题很多而且广泛,问题外表简单朴素,本质上却十分复杂深刻;解决问题的方法是千变万化,非常灵活,常常是一种问题就有一种解法。

图论研究的内容非常广泛,如图的连通性、遍历性、图的计数、图的着色、图的极值问题、图的可平面性等。

历史上参与研究图论问题的人既有许多天才的数学家,也有不少的业余爱好者。

那么什么是图论中的图呢?在日常生活、生产活动以及科学研究中,人们常用点表示事物,用点与点之间是否有连线表示事物之间是否是有某种关系,这样构成的图形就是图论中的图。

其实,集合论中的二元关系的关系图都是图论中的图,在这些图中,人们只关心点与点之间是否有连线,而不关心点的位置,以及连线的曲直。

这就是图论中的图与几何中的图形的本质区别。

因此在现实世界中,事物的许多状态可以由图形来描述,使其简单直观,便于理解,帮助思维,易于记忆,同时还可以根据图的特点,从不同角度来扩展讨论范围。

1.1、图论概述图论〔Graph Theory 〕是数学的一个分支,也是一门新兴学科,发展迅速而又应用广泛。

它已广泛地应用于物理、化学、运筹学、计算机科学、电子学、信息论、控制论、网络管理、社会科学等几乎所有的学科领域。

另一方面,随着这些学科的发展,特别是计算机科学的快速发展,又大大的促进了图论的发CAB D(b)展。

图论中的研究对象是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。

1.2 图论中的最短路问题路的定义 设G 为无向标定图,G 中顶点与边的交替序列 iljl j i j i v e e v e v T 2110称为0i v 到il v 的通路,其中1 r i v ,r i v 为r j e 的端点,li i v v l r ,,,,2,10 分别称为T 始点与终点,T 中的边的条数称为它的长度,若又有li i v v 0,则称T 为回路。

若T 的所有边各异,则称T 为简单通路。

若又有li i v v 0,则称T 为简单回路,若所有的顶点(除0i v 与l i v可能相同外)各异,所有的边也各异,则称T 为初级通路或路径,若又有li i v v 0,则T 为初级回路或圈,将长度为奇数的圈成为奇圈,长度为偶数的圈为偶圈。

我们要考虑的问题是对任意给定的一个赋权图G ,及G 中两个指点的顶点0u 与0v ,求出其最短路径。

易见。

只要考虑简单连通图的情形就够了。

这里我们假设每边e 的权)(e w 都是大于0的实数。

因为当一条边uv e 的权为0时。

我们可以把u 和v 合并成一个顶点。

又,我们约定边)(G E e 当且仅当 )(e w 。

1.3 Floyd 算法Floyd 算法的基本思想:可以将问题分解,先找出最短的距离,然后在考虑如何找出对应的行进路线。

如何找出最短路径呢,这里还是用到动态规划的知识,对于任何一个地点而言,i 到j 的最短距离不外乎存在经过i 与j 之间的k 和不经过k 两种可能,所以可以令k=1,2,3,...,n(n 是地点的数目),在检查d(ij)与d(ik)+d(kj)的值;在此d(ik)与d(kj)分别是目前为止所知道的i 到k 与k 到j 的最短距离,因此d(ik)+d(kj)就是i 到j 经过k 的最短距离。

所以,若有d(ij)>d(ik)+d(kj),就表示从i 出发经过k 再到j 的距离要比原来的i 到j 距离短,自然把i 到j 的d(ij)重写为d(ik)+d(kj),每当一个k 查完了,d(ij)就是目前的i 到j 的最短距离。

重复这一过程,最后当查完所有的k时,d(ij)里面存放的就是i到j之间的最短距离了。

Floyd算法的基本步骤:定义n×n的方阵序列D-1, D0 , …Dn-1,初始化:D-1=CD-1[i][j]=边<i,j>的长度,表示初始的从i到j的最短路径长度,即它是从i 到j的中间不经过其他中间点的最短路径。

迭代:设Dk-1已求出,如何得到Dk(0≤k≤n-1)Dk-1[i][j]表示从i到j的中间点不大于k-1的最短路径p:i…j,考虑将顶点k加入路径p得到顶点序列q:i…k…j,若q不是路径,则当前的最短路径仍是上一步结果:Dk[i][j]= Dk-1[i][j];否则若q的长度小于p的长度,则用q取代p作为从i到j的最短路径。

因为q的两条子路径i…k和k…j皆是中间点不大于k-1的最短路径,所以从i到j中间点不大于k的最短路径长度为:Dk[i][j]=min{ Dk-1[i][j], Dk-1[i][k] +Dk-1[k][j] }二、利用图论知识寻找指定两点最短路径2.1 把实际问题转化成图论问题图1 重庆邮电大学地图上图为邮电大学的地图,我们在地图中选取重邮的八个地方看成是八个点(1、新世纪超市2、三教学楼3、数字图书馆4、二教学楼5、信科大楼6、太极操场7、老图书馆8、31栋宿舍),用线段把每一个点与其相邻的点连接起来,从而形成一个无向图。

再根据实际情况:不同地点的距离问题;路的畅通与否等给相应的边赋上权值,最后得出一个赋权图,如图2:图2 赋权图2.2 Floyd算法用C++实现#include<iostream>#include<vector>#include<string>using namespace std;#define MAX_VEX_NUM 10vector<string> allPath; //向量,用来存放所有的顶点a到顶点i的路径vector<int> all; //向量,用来存放对应路径的长度struct MGraph{char vexs[MAX_VEX_NUM];int arcs[MAX_VEX_NUM][MAX_VEX_NUM];int vexnum,arcnum;};MGraph G;int Locatevex(MGraph G,char v)//图的基本操作,寻找V的位置{int i=0;while(i<G.vexnum && v!=G.vexs[i])i++;if(i<G.vexnum)return i;elsereturn -1;}int CreateUDG(MGraph &G) //数组邻接矩阵表示法构造无向图{char v1,v2;int weight;cout<<"请输入图的顶点数和边的条数"<<endl;cin>>G.vexnum>>G.arcnum;cout<<"请输入顶点的名称(0--9)"<<endl;for(int i=0;i<G.vexnum;i++)cin>>G.vexs[i];for(int q=0;q<G.vexnum;q++)for(int p=0;p<G.vexnum;p++)G.arcs[q][p]=0;for(int k=0;k<G.arcnum;k++)//构造邻接矩阵{cout<<"输入边的顶点和权值:(格式为:起点终点权值)"<<endl;cin>>v1>>v2>>weight;int a=Locatevex(G,v1);int b=Locatevex(G,v2);G.arcs[a][b]=weight;G.arcs[b][a]=G.arcs[a][b];}cout<<"该图的邻接矩阵表示为:\n";for(int n=0;n<G.vexnum;n++)//输出顶点cout<<G.vexs[n]<<" ";cout<<"(矩阵顶点名称)";cout<<endl;cout<<endl;for(int x=0;x<G.vexnum;x++)//输出邻接矩阵{for(int y=0;y<G.vexnum;y++)cout<<G.arcs[x][y]<<" ";cout<<endl;}cout<<endl;cout<<endl;return 1;}//CreateUDGvoid Minway(MGraph G,bool *visited,char vexs,int Long,char vb,string path) //递归求取所有顶点a到顶点i的路径{if(vexs==vb){path=path+"-->"+vexs;allPath.push_back(path);all.push_back(Long);cout<<"路径:"<<path<<" 长度:"<<Long<<endl;}else{path=path+"-->"+vexs;int i=Locatevex(G,vexs);visited[i]=true;for(int j=0;j<G.vexnum;j++)if((!visited[j])&&(G.arcs[i][j]!=0)){Minway(G,visited,G.vexs[j],Long+G.arcs[i][j],vb,path);}visited[i]=false;}}void CountMinway(MGraph G) //该函数调用递归部分实现递归{char va,vb;string path;cout<<"请输入您所处的位置:";cin>>va;cout<<"请输入您想到达的位置:";cin>>vb;cout<<endl;int i=Locatevex(G,va);bool visited[100];for(int j=0;j<G.vexnum;j++)visited[j]=false;visited[i]=true;int Long=0;path+=va;for( j=0;j<G.vexnum;j++)if(G.arcs[i][j]!=0){Long=G.arcs[i][j];Minway(G,visited,G.vexs[j],Long,vb,path);}cout<<endl;}void Minway()//输出最短路径{int min=10000;for(int i=0;i<allPath.size();i++)if(all[i]<min)min=all[i];for(int j=0;j<allPath.size();j++)if(all[j]==min)cout<<"最短路径: "<<allPath[j]<<" 长度:"<<all[j]<<endl;cout<<endl;}void main(){CreateUDG(G); //建图CountMinway(G); //找出所有路径Minway(); //输出最短路径}程序描述:通过输入顶点的个数、边的条数和名称以及两点之间的权值得到一个带权值的矩阵。

相关文档
最新文档