广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python实现Dijkstra法
  • 513
分享到

python实现Dijkstra法

pythonDijkstra 2023-01-31 07:01:52 513人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

1.图: 2.代码: ''' file: py_Dijkstra.py Dijkstra 最短路径算法 #本示例结果为: S= [{'index': 1, 'val': 0}, {'index': 3, 'val': 15},

1.图:



2.代码:


'''
file: py_Dijkstra.py

Dijkstra 最短路径算法
#本示例结果为:
S= [{'index': 1, 'val': 0}, {'index': 3, 'val': 15}, {'index': 2, 'val': 25}, {'index': 6, 'val': 30}, {'index': 5, 'val': 40}, {'index': 4, 'val': 50}]
dist= [0, 25, 15, 50, 40, 30]

'''
#############################################
debug=0
MAX_NUM=10000
v_num=6
#S 放 最短路径结点添加过程
S=[]#[{'index': 1, 'val': 0},...]
#dist放各个步骤临时dist值
dist=[]
edge=[
    [0,30,15,MAX_NUM,MAX_NUM,MAX_NUM],
    [5,0,MAX_NUM,MAX_NUM,20,30],
    [MAX_NUM,10,0,MAX_NUM,MAX_NUM,15],
    [MAX_NUM,MAX_NUM,MAX_NUM,0,MAX_NUM,MAX_NUM],
    [MAX_NUM,MAX_NUM,MAX_NUM,10,0,MAX_NUM],
    [MAX_NUM,MAX_NUM,MAX_NUM,30,10,0]
]
#############################################
def init(start):
    if(debug):
        print("[init]")
    S.append({'index':start,'val':0})
    i=0
    while(i<v_num):
        dist.append(edge[start-1][i])
        i=i+1

######################
def v_in_S(v):
    i=0
    while(i<len(S)):
        if(v==S[i]['index']):
            return "YES"
        i=i+1
    
    return "NO"

######################
def get_min():
    if(debug):
        print("[get_min]")
    if(len(dist)<1):
        return {'index':-1,'val':0}#这里该直接exit(1)的,这里返回值,是方便调试而已
    i=0
    min_val=MAX_NUM
    min_index=0
    while(i<len(dist)):
        if(v_in_S(i+1)=="NO"):
            if(dist[i] < MAX_NUM and dist[i] > 0 and min_val>dist[i]):
                min_val=dist[i]
                min_index=i
        i=i+1
    return {'index':min_index+1,'val':min_val}


######################
def update_dist():
    tmp_index=S[len(S)-1]['index']
    tmp_val=S[len(S)-1]['val']
    if(debug):
        print("[update_dist]","tmp_index=",tmp_index,";tmp_val=",tmp_val)    
    i=0
    while(i<v_num):
        if(v_in_S(i+1)=="NO"):
            i_dist=tmp_val+edge[tmp_index-1][i]
            if(debug):
                print("i=",i,";i_dist=",i_dist)
            if(dist[i]>i_dist):
                dist[i]=i_dist
        i=i+1
    if(debug):
        print("after update dist:dist=",dist)
    
######################
def process():
    if(debug):    
        print("[process]")
    i=0
    S_len=len(S)
    while(v_num != S_len and i<v_num):
        min_vertex=get_min()
        if(debug):
            print("i=",i,";min_vertex=",min_vertex)        
            print("len(S)=",len(S),";S=",S)
        if(min_vertex['index']>0):
            if(debug):
                print("----BEFORE append:   len(S)=",len(S),";S=",S)
            S.append(min_vertex)
            if(debug):
                print("====AFTER append:   len(S)=",len(S),";S=",S)            
            update_dist()
            
        i=i+1
        S_len=len(S)

######################
def py_Dijkstra(start):
    init(start)
    print("初始条件:\n","\tstart=",start,"\n\tS=",S,"\n\tdist=",dist)
    process()
    print("结果:\n","\tS=",S,"\n\tdist=",dist)
    
#############################################
if(__name__=="__main__"):
    py_Dijkstra(1)








3.结果:

初始条件:
 	start= 1 
	S= [{'index': 1, 'val': 0}] 
	dist= [0, 30, 15, 10000, 10000, 10000]
结果:
 	S= [{'index': 1, 'val': 0}, {'index': 3, 'val': 15}, {'index': 2, 'val': 25}, {'index': 6, 'val': 30}, {'index': 5, 'val': 40}, {'index': 4, 'val': 50}] 
	dist= [0, 25, 15, 50, 40, 30]


--结束END--

本文标题: python实现Dijkstra法

本文链接: https://www.lsjlt.com/news/191887.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python实现Dijkstra法
    1.图: 2.代码: ''' file: py_Dijkstra.py Dijkstra 最短路径算法 #本示例结果为: S= [{'index': 1, 'val': 0}, {'index': 3, 'val': 15}, ...
    99+
    2023-01-31
    python Dijkstra
  • dijkstra算法python实现
    MAX_value = 999999 def dijkstra(graph, s): # 判断图是否为空,如果为空直接退出 if graph is None: return None dist ...
    99+
    2023-01-31
    算法 dijkstra python
  • 怎么使用C++实现Dijkstra算法
    本篇内容介绍了“怎么使用C++实现Dijkstra算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体代码1.graph类graph类用于...
    99+
    2023-07-02
  • python3实现Dijkstra算法最短路径的实现
    问题描述 现有一个有向赋权图。如下图所示: 问题:根据每条边的权值,求出从起点s到其他每个顶点的最短路径和最短路径的长度。 说明:不考虑权值为负的情况,否则会出现负值圈问题。 ...
    99+
    2022-11-12
  • Python使用邻接矩阵实现图及Dijkstra算法问题
    目录使用邻接矩阵实现图及Dijkstra算法将邻接矩阵输出成图总结使用邻接矩阵实现图及Dijkstra算法 # 邻接矩阵实现无向图 Dijkstra算法 inf = float("...
    99+
    2022-12-16
    Python使用邻接矩阵 Dijkstra算法 Python邻接矩阵
  • C++实现Dijkstra算法的示例代码
    目录一、算法原理二、具体代码1.graph类2.PathFinder类3. main.cpp三、示例一、算法原理 链接: Dijkstra算法及其C++实现参考这篇文章 二、具体代码...
    99+
    2022-11-13
  • Java实现Dijkstra算法的示例代码
    目录一 问题描述二 实现三 测试一 问题描述 小明为位置1,求他到其他各顶点的距离。 二 实现 package graph.dij...
    99+
    2022-11-13
  • Dijkstra算法原理及C++怎么实现
    这篇文章主要介绍“Dijkstra算法原理及C++怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Dijkstra算法原理及C++怎么实现”文章能帮助大家解决问题。什么是最短路径问题如果从图中...
    99+
    2023-07-02
  • Python中Dijkstra算法有什么用
    小编给大家分享一下Python中Dijkstra算法有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!说明Dijkstra算法是经典的最短路径算法,它是数据结...
    99+
    2023-06-20
  • 详解Dijkstra算法原理及其C++实现
    目录什么是最短路径问题Dijkstra算法实现思路案例分析代码实现什么是最短路径问题 如果从图中某一顶点(称为源点)到达另一顶点(称为终点)的路径可能不止一条,如何找到一条路径使得沿...
    99+
    2022-11-13
  • C++最短路径Dijkstra算法如何实现
    这篇文章主要介绍“C++最短路径Dijkstra算法如何实现”,在日常操作中,相信很多人在C++最短路径Dijkstra算法如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++最短路径Dijkstra...
    99+
    2023-07-05
  • 实现Dijkstra算法最短路径问题详解
    1、最短路径问题介绍 问题解释: 从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径 解决问题的算法: 迪杰斯特拉算法(Dijkstra...
    99+
    2022-11-12
  • 教你在 Java 中实现 Dijkstra 最短路算法的方法
    目录定义带权有向图的实现带权有向边带权有向图最短路算法APIDijkstra 算法算法流程最小索引优先队列实现算法后记定义 最短路问题的定义为: 下图左侧是一幅带权有向图,以顶点 ...
    99+
    2022-11-13
  • java实现最短路径算法之Dijkstra算法的示例
    这篇文章主要介绍了java实现最短路径算法之Dijkstra算法的示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、知识准备:1、表示图的数据结构用于存储图的数据结构有多...
    99+
    2023-05-31
    java dijkstra
  • Java基于Dijkstra算法实现校园导游程序
    本文实例为大家分享了Dijkstra算法实现校园导游程序的具体代码,供大家参考,具体内容如下 应用设计性实验 1.问题描述 校网导游程序: 一个校园有若干景点,如正校门、人工湖、磁悬...
    99+
    2022-11-13
  • python中怎么利用Dijkstra算法求最短路径
    python中怎么利用Dijkstra算法求最短路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  从某源点到其余各顶点的最短路径  Dijkstra算法可用...
    99+
    2023-06-02
  • Java实现Dijkstra输出最短路径的实例
    Java实现Dijkstra输出指定起点到终点的最短路径前言:最近在公司参加了一个比赛,其中涉及的一个问题,可以简化成如是描述:一个二维矩阵,每个点都有权重,需要找出从指定起点到终点的最短路径。马上就想到了Dijkstra算法,所以又重新温...
    99+
    2023-05-31
    java dijkstra ava
  • C++最短路径Dijkstra算法的分析与具体实现详解
    目录前言Dijkstra 算法分析初始条件第一轮第二轮及以后Dijkstra 代码实现输入输出格式时间复杂度前言 经典的求解最短路径算法有这么几种:广度优先算法、Dijkstra算法...
    99+
    2023-03-10
    C++最短路径Dijkstra算法 C++最短路径算法 C++ Dijkstra算法
  • 详解Java中Dijkstra(迪杰斯特拉)算法的图解与实现
    目录简介工作过程总体思路实现小根堆Dijsktra测试简介 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为...
    99+
    2022-11-13
  • python中怎么利用Dijkstra算法规划机器人路径
    今天就跟大家聊聊有关python中怎么利用Dijkstra算法规划机器人路径,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、算法原理如图所示,Dijkstra算法要解决的是一个有向...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作