python迷宫最短路径_python实现最短路径的实例方法

解决最短路径问题:(如下三种算法)

(1)迪杰斯特拉算法(Dijkstra算法)

(2)弗洛伊德算法(Floyd算法)

(3)SPFA算法

第一种算法:

Dijkstra算法

广度优先搜索解决赋权有向图或者无向图的单源最短路径问题.是一种贪心的策略

算法的思路

声明一个数组dis来保存源点到各个顶点的最短距离和一个保存已经找到了最短路径的顶点的集合:T,初始时,原点s的路径权重被赋为0(dis[s]=0)。若对于顶点s存在能直接到达的边(s,m),则把dis[m]设为w(s, m),同时把所有其他(s不能直接到达的)顶点的路径长度设为无穷大。初始时,集合T只有顶点s。

然后,从dis数组选择最小值,则该值就是源点s到该值对应的顶点的最短路径,并且把该点加入到T中,OK,此时完成一个顶点,再看看新加入的顶点是否可以到达其他顶点并且看看通过该顶点到达其他点的路径长度是否比源点直接到达短,如果是,那么就替换这些顶点在dis中的值,然后,又从dis中找出最小值,重复上述动作,直到T中包含了图的所有顶点。

第二种算法:

Floyd算法

原理:

Floyd算法(弗洛伊德算法)是一种在有向图中求最短路径的算法。它是一种求解有向图中点与点之间最短路径的算法。

用在拥有负权值的有向图中求解最短路径(不过不能包含负权回路)

流程:

有向图中的每一个节点X,对于图中过的2点A和B,

如果有Dis(AX)+ Dis(XB)< Dis(AB),那么使得Dis(AB)=Dis(AX)+Dis(XB)。

当所有的节点X遍历完后,AB的最短路径就求出来了。

示例一:

示例二:

示例三:

第三种算法:

SPFA算法是求解单源最短路径问题的一种算法,由理查德·贝尔曼(Richard Bellman) 和 莱斯特·福特 创立的。有时候这种算法也被称为 Moore-Bellman-Ford 算法,因为 Edward F. Moore 也为这个算法的发展做出了贡献。它的原理是对图进行V-1次松弛操作,得到所有可能的最短路径。

其优于迪科斯彻算法的方面是边的权值可以为负数、实现简单,缺点是时间复杂度过高,高达 O(VE)。但算法可以进行若干种优化,提高了效率。

思路:

我们用数组dis记录每个结点的最短路径估计值,用邻接表或邻接矩阵来存储图G。我们采取的方法是动态逼近法:设立一个先进先出的队列用来保存待优化的结点,优化时每次取出队首结点u,并且用u点当前的最短路径估计值对离开u点所指向的结点v进行松弛操作,如果v点的最短路径估计值有所调整,且v点不在当前的队列中,就将v点放入队尾。这样不断从队列中取出结点来进行松弛操作,直至队列空为止。

原文链接:https://www.py.cn/jishu/gaoji/19619.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[html] html如何创建图片热区(img usemap)?

[html] html如何创建图片热区&#xff08;img usemap&#xff09;&#xff1f; <img src"china.gif" usemap"#mymap"><map name"mymap"><area shape"rect" href"a.html" coords"0,0,50,50"><…

探讨LoadRunner的并发用户和集合点

探讨LoadRunner的并发用户和集合点 近来跟踪一个项目&#xff0c;发现同事们在执行性能测试时&#xff0c;比较热衷于使用集合点&#xff0c;从概念上认为要得到并发用户就必须设置集合点&#xff0c;认为在执行一个压力测试脚本时&#xff0c;设置了集合点才算是有效的并发用…

python在职场的用处大吗_Python未来发展怎么样,未来办公是否都需要精通Python?...

首先&#xff0c;要先了解Python是什么&#xff1f;Python是一种计算机程序设计语言&#xff0c;又被称为胶水语言&#xff0c;可以用混合编译的方式使用c/c/java等语言的库。你可能已经听说过很多种流行的编程语言&#xff0c;比如在大学里感觉非常难学的C语言&#xff0c;进入…

spring gateway 鉴权_通过spring实现service变成controller,代码得到了简化

在网上发现了一个牛X的思路&#xff0c;在做restful的时候&#xff0c;如果业务改变&#xff0c;需要每次都修改controller&#xff0c;后来方便了&#xff0c;直接透传的方式&#xff0c;其实也比较麻烦&#xff0c;每次都要写controller。需求变了接口也发生了改变&#xff0…

java中return返回值_Java中return的用法

展开全部一、return语句总是用在方法中&#xff0c;有两个作用。一个是返回方法指定类型的值(这个值总62616964757a686964616fe59b9ee7ad9431333366306434是确定的)。一个是结束方法的执行(仅仅一个return语句)。二、实例1 。返回一个String。private String gets(){String s …

Magento 模块详解

模块&#xff08;module&#xff09;是Magento的核心。站点上的任何 一个动作&#xff08;action&#xff09;&#xff0c;无论是在前台和还是在后台的每一个操作都是通过模块来实现的。模块是可以视为一个容器&#xff0c;它可包 含下面这几项&#xff1a;设置(settings)&…

python运行别人的项目_pycharm实现在虚拟环境中引入别人的项目

如果你想引入别人的项目&#xff0c;但是呢引入的项目可能与自己原先装的模块的版本产生冲突&#xff0c;而且如果引入一个项目就在本地进行运行使用&#xff0c;每个项目用的依赖包都不大相同&#xff0c;就会导致解释器安装包过多&#xff0c;就会导致加载过慢&#xff0c;甚…

java 事件分发线程_深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) [转载]...

本系列文章导航本文主要解决的问题是&#xff1a;如何使其Swing程序只能运行一个实例&#xff1f;抛开Swing&#xff0c; 我们的程序是通过java 命令行启动一个进程来执行的&#xff0c;该问题也就是说要保证这个进程的唯一性&#xff0c;当然如果能够访问系统的接口&#xff0…

java redis 分布式锁_使用Redis单实例实现分布式锁

一、前言在同一个jvm进程中时&#xff0c;可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题&#xff0c;但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候&#xff0c;juc包的锁就无能无力了&#xff0c;这时候就需要分布式锁了。常见…

设计一个按优先数调度算法实现处理器调度的程序_计算机中的程序都是怎么运行的,来深入了解一下吧...

在现代计算机操作系统中&#xff0c;总是会保持多道程序环境。一个作业被提交后&#xff0c;通常经过作业调度和进程调度后&#xff0c;才能获得处理机。有时为提高内存利用率&#xff0c;还会设置中程调度。那我们先来了解一下处理机调度的层次吧。高级调度&#xff0c;又称作…

从数据库加载程序集

有的做MSCRM2011开发的朋友会奇怪&#xff0c;注册的Plugin可以注册在数据库中&#xff0c;那么它如何去加载这个dll呢。最近正好有空&#xff0c;简单地实现了一下从数据库加载程序集&#xff0c;关键的地方是需要使用Assembly.Load方法的一个重载&#xff1a; Assembly.Load(…

Android 获取包名,版本信息及VersionName名称

话不多说&#xff0c;直接上代码&#xff0c;此处&#xff0c;主要是在版本升级的时候&#xff0c;使用较多。private String getAppInfo() {try {String pkName this.getPackageName();String versionName this.getPackageManager().getPackageInfo(pkName, 0).versionName;…

mysql 查看锁_SQL-mysql锁等待与死锁

一 前言本篇是MYSQL高级进阶篇内容第二篇&#xff0c;学习本篇的基础是知识追寻者之前发布过的文章&#xff0c;尤其是《MYSQL架构入门篇》重中之重&#xff1b;《SQL-你真的了解什么SQL么&#xff1f;》《SQL-小白最佳入门sql查询一》《SQL-小白最佳入门sql查询二》《SQL- 多年…

easyui datagrid java_EasyUI DataGrid 显示不了数据????

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Struts2:text/htmlaction:public String getList() throws Exception {// TODO Auto-generated method stubLong count (long) recruitBiz.countRecruitInfo();List list recruitBiz.findRecruitBySearch(page,rows, null);JSONO…

sed 手册阅读笔记转

原文链接sed 手册阅读笔记摘要sed 手册本身不太适合初学者&#xff0c;我在看的过程中加了一些 自己的注释和一些例子&#xff0c;帮助理解&#xff0c;如有偏差或错误&#xff0c;请指出&#xff0c;多谢。目录1. sed的工作原理 2. sed中如何选择特定的行 3. sed的命令行选项 …