图论 数据结构-指定有向带权图中的任意几点,如何求出是否存在通路以及通路的最短路径?

问题描述

指定有向带权图中的任意几点,如何求出是否存在通路以及通路的最短路径?

指定有向带权图中的任意几点,如何求出是否存在通路以及通路的最短路径?

解决方案


虽然这是一个无向的,但是主要还是方法。
面对这个问题主要还是先解决起点(设为a)到其他点的最短通路,直到找到你所指定的一点(设为z)
w(a,b)=4 w(a,d)=2 w(b,c)=3 w(d,e)=3 w(e.z)=1 w(c,z)=2

1、初始P={a},T={b,c,d,e,z} D(b)=4;D(c)=∞;D(d)=2;D(e)=∞;D(z)=∞;其中p表示求得最小距离的顶点集合,其中D(a)=0

            由此可以看出D(d)=2是距离a最近的,将它放到P集合中
            2、P={a,d},T={b,c,e,z}
                    D(x)=min{上一步计算的D(x),上一步新加到P集合的点到x的距离+新加的最短距离}
                    所以:
                    D(b)=min{4, ∞}=4;
                    D(c)=min{∞,∞}=∞;
                    D(e)=min{∞,2+3}=5;
                    D(z)=min{∞.∞}=∞;
                    由此可知D(b)是最小的,
            3、P={a,d,b},T={c,e,z}
                    D(c)=min{∞,D(b)+w(b,c)}=7;
                    D(e)=min{5,∞}=5;
                    D(z)=min{∞,∞}=∞;
                    将e放到P中依次类推,知道找到你选定的终点为止。
时间: 2024-11-03 11:30:39

图论 数据结构-指定有向带权图中的任意几点,如何求出是否存在通路以及通路的最短路径?的相关文章

数据结构和算法10 之带权图

   上一节我们已经看到了图的边可以有方向,这一节里,我们将探讨边的另一个特性:权值.例如,如果带权图的顶点代表城市,边的权可能代表城市之间的距离,或者城市之间的路费,或者之间的车流量等等.     带权图归根究底还是图,上一节那些图的基本操作,例如广度优先搜索和深度优先搜索等都是一样的,在这一节里,我们主要来探讨一下带权图的最小生成树最短路径问题. 最小生成树问题     首先探讨下最小生成树问题,它与上一节所提到的最小生成树不同.上一节的最小生成树是个特例,即所有边的权值都一样.那么算法如何

用无向带权图实现校园导航系统

学校数据结构的课程实验之一. 用到的数据结构:无向带权图 用到的算法:Floyd最短路径算法,深度优先搜索(递归实现) 需求分析: 设计一个校园导航程序,为访客提供各种信息查询服务: 1. 以图中各顶点表示校内各单位地点,存放单位名称,代号,简介等信息:以边表示路径,存放路径长度等相关信息. 2. 图中任意单位地点相关信息的查询. 3. 图中任意单位的问路查询,即查询任意两个单位之间的一条最短的路径. 2. 从图中任意单位地点出发的一条深度优先遍历路径. 主函数: 1 #include <ios

C++数据结构中有向带权图的子邻接域图的算法怎么实现?是C++的,谢谢

问题描述 C++数据结构中有向带权图的子邻接域图的算法怎么实现?是C++的,谢谢 C++数据结构中有向带权图的子邻接域图的算法怎么实现?是C++的,谢谢 解决方案 http://wenku.baidu.com/link?url=X3yvE5Vll4s8xwO8u0ZikzG73nkjdnGIeCMTj9JmUgoCuM2kRtkKKnLL-tVcZBqcD9Yaq-oeVzoJl0Ru0zkV4W7WOrgC_s3I0z0PodcnDWy

数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)

本文是[数据结构基础系列(7):图]中第4课时[图的邻接矩阵存储结构及算法]和第5课时[图的邻接表存储结构及算法],并为后续内容的实践提供支持. 图的存储结构主要包括邻接矩阵和邻接表,本算法库提供存储结构的定义,以及用于构造图存储结构.不同结构的转换及显示的代码.算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:graph.h,包含定义图数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED

数据结构教程 第二十八课 图的存储结构

教学目的: 掌握图的二种存储表示方法 教学重点: 图的数组表示及邻接表表示法 教学难点: 邻接表表示法 授课内容: 一.数组表示法 用两个数组分别存储数据元素(顶点)的信息和数据元素之间的关系(边或弧)的信息. // 图的数组(邻接矩阵)存储表示 #define INFINITY INT_MAX //最大值无穷大 #define MAX_VERTEX_NUM 20 //最大顶点个数 typedef enum{DG,DN,AG,AN} GraphKind;//有向图,有向网,无向图,无向网 typ

C++不带权无向网的邻接表的最小生成树的实现所用算法

问题描述 C++不带权无向网的邻接表的最小生成树的实现所用算法 写了一段不带权无向网邻接表的代码,用算法实现最小生成树,但是Kruskal和Prim两个算法得出的是不一样的,Kruskal是正确的,求解 解决方案 http://blog.csdn.net/gyarenas/article/details/42245119 解决方案二: 一个图的最小生成树结果是不唯一的,虽然两种算法得出的结果可能不一样但是肯定都是正确的,我觉着有以下两种可能.1.结果要求的最小生成树可能有某种规则,以至于prim

c语言-C语言中临界矩阵转换为双向链域表示一个带权的无向图,设计一种算法的表示

问题描述 C语言中临界矩阵转换为双向链域表示一个带权的无向图,设计一种算法的表示 C语言中临界矩阵转换为双向链域表示一个带权的无向图,设计一种算法的表示 解决方案 相当于图的遍历,首先根据邻接矩阵构造节点,然后依次把边添加到图中.

Dijkstra求含权图最短通路;试探与回溯保证枚举的不遗漏不重复

求两节点的最短通路,对于无权图,可以通过图的广度优先遍历求解.含权图一般通过Dijkstra算法求解. import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class Shortest { static class Cell{ int node;//连接到哪个节点 int weight

HDU 3038 How Many Answers Are Wrong? :带权并查集

链接: http://acm.hdu.edu.cn/showproblem.php?pid=3038 题目: Problem Description TT and FF are ... friends. Uh... very very good friends -________-b FF is a bad boy, he is always wooing TT to play the following game with him. This is a very humdrum game. T