python深度优先与广度优先的遍历算法区别
首先要理解搜索步,一个完整的搜索步包括两个处理:
a) 获得当前位置上,有几条路可供选择
b) 根据选择策略,选择其中一条路,并走到下个位置
广度优先:就是,从初始点出发,把所有可能的路径都走一遍,如果里面没有目标位置,则尝试把所有两步能够到的位置都走一遍,看有没有目标位置;如果还不行,则尝试所有三步可以到的位置。这种方法,一定可以找到一条最短路径,但需要记忆的内容实在很多,要量力而行。
Dijkstra算法图文详解
求最短路径需要引进heapq模块,该模块提供了堆排序算法以及优先队列
详情请查看下列原文
Python标准库模块之heapq

以下为求最短路径 例题
1、计算下图任意两点的最短路径。

实现代码

import heapq
import math
graph={"v1":{"v2":2,"v3":8,"v4":1},"v2":{"v1":2,"v3":6,"v5":1},"v3":{"v1":8,"v2":6,"v4":7,"v5":5,"v6":1,"v7":2},"v4":{"v1":1,"v3":7,"v7":9},"v5":{"v2":1,"v3":5,"v6":3,"v8":2,"v9":9},"v6":{"v3":1,"v5":3,"v7":4,"v9":6},"v7":{"v3":2,"v4":9,"v6":4,"v9":3,"v10":1},"v8":{"v5":2,"v9":7,"v11":9},"v9":{"v5":9,"v6":6,"v7":3,"v8":7,"v10":1,"v11":2},"v10":{"v7":1,"v9":1,"v11":4},"v11":{"v8":9,"v9":2,"v10":4}
}
#初始化起点的距离  到自身为零 到其他节点为无穷大
def init_distance(graph,s): #传入图像 和起点distance={s:0}for vertex in graph:if vertex !=s:distance[vertex]=math.inf  #除到本身都为无穷大return distance
def dijkstra(graph,s):pqueue=[]     #创建一个队列# 先添加一个起点到队列 和后面加入的排序  # 此方法把 队列里面的元素按照优先排列 调用heapop时返回优先级最高的   比如数值最小的heapq.heappush(pqueue,(0,s))  seen=set() #储存出现过的点parent={s:None}   #标记此节点的上一个节点  此节点为起点 则父节点为None  distance=init_distance(graph,s)while (len(pqueue)>0):pair=heapq.heappop(pqueue)  #返回一个数值最小的元组 dist=pair[0]  #提取距离vertex=pair[1] #提取节点seen.add(vertex) #添加出现过的节点nodes=graph[vertex].keys()   #提取与vertex相连的节点# print(nodes)#核心算法for w in nodes:if w not in seen:if dist+graph[vertex][w]<distance[w]:#把路径短的添加到队列 并排序heapq.heappush(pqueue,(dist+graph[vertex][w],w))parent[w]=vertex  #记录父节点distance[w]=dist+graph[vertex][w] #更新起点到w节点的距离return parent,distance
#测试代码
start, end = input("请输入起止节点用空格分开:").split()
parent,distance=dijkstra(graph,start)
print("父节点列表:",parent)
print("{}到各点的距离:".format(start),distance)
print("{}到{}的距离:".format(start,end),distance[end])

运行结果

如果要求出路径,可以根据父节点parent列表求出路径
实现代码

def distance_path(graph,s,end):parent, distance = dijkstra(graph, s)path=[end]  while parent[end] !=None:path.append(parent[end])end=parent[end]path.reverse()  return path

测试代码

#测试代码
start, end = input("请输入起止节点用空格分开:").split()
parent,distance=dijkstra(graph,start)
path=distance_path(graph,start,end)
print("{}到{}的路径:".format(start, end), path)

运行结果

谢谢请关注。

python基于广度优先(BFS)的迪杰斯特拉(Dijkstra)算法 求最短路径相关推荐

  1. 迪杰斯特拉(Dijkstra)算法解决最短路径问题

    Dijkstra 算法介绍 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.迪杰斯特拉(Dijkstra)算法是最经典的最短路径算法之一,用 ...

  2. java数据结构和算法——迪杰斯特拉(Dijkstra)算法

    目录 一.迪杰斯特拉(Dijkstra)算法介绍 二.迪杰斯特拉(Dijkstra)算法过程 三.迪杰斯特拉(Dijkstra)算法--应用场景(最短路径问题) 四.迪杰斯特拉(Dijkstra)算法 ...

  3. 059.迪杰斯特拉(Dijkstra)算法的原理以及解决最短路径问题

    1. 迪杰斯特拉(Dijkstra)算法的原理 1.1. 算法应用场景-最短路径问题 1.2. 基本介绍 1.3. 步骤详解 1.4. 思路解析 1.5. 图解步骤 2. 迪杰斯特拉(Dijkstra ...

  4. 最短路径算法-迪杰斯特拉(Dijkstra)算法

    最短路径算法-迪杰斯特拉(Dijkstra)算法 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思 ...

  5. Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法

    1.Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法 1.1 迪杰斯特拉(Dijkstra)算法 1.1.1 迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra ...

  6. 数据结构——图——迪杰斯特拉(Dijkstra )算法

    数据结构--图--迪杰斯特拉(Dijkstra )算法 这是一个按路径长度递增的次序产生最短路径的算法.它的思路大体是这样的. 比如说要求图7-7-3中顶点v0到顶点v1的最短距离,没有比这更简单的了 ...

  7. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  8. java实现迪杰斯特拉(Dijkstra)算法求解最短路问题

    迪杰斯特拉(Dijkstra)算法是由荷兰计算机科学家狄克斯特拉于1959年提出的.是寻找从一个顶点到其余各顶点的最短路径算法,可用来解决最短路径问题. 迪杰斯特拉算法采用贪心算法的策略,将所有顶点分 ...

  9. 迪杰斯特拉(Dijkstra)算法详解

    迪杰斯特拉(Dijkstra)算法详解 在讲解迪杰斯特拉算法之前先讲解一下什么是最短路径: [图一] 假如我要求从A点到D点的最短路径,我们用肉眼可以很快速找出A–>C–>E–>D就 ...

最新文章

  1. sql server:alter database name
  2. 分子克隆基础:什么是质粒
  3. java handler的用法_Handler和内部类的正确用法
  4. 1.4- 定时任务总结之九句箴言
  5. python设置文件权限_Python os.chmod() 方法
  6. lightbox的一个ajax效果
  7. 黑客、蠕虫和网络恐怖主义简史(组图)
  8. 计算机在微表情的应用,一种有效的微表情自动识别方法
  9. 直通输出设备 android kodi,PVE直通核显搭建LibreELEC KODI HTPC实现HDMI输出
  10. IEEE文献高级检索
  11. 《京东话费充值系统架构演进实践》读后感
  12. (三)Linux vi 文本编辑器,用户管理,组管理,Sudo命令,时间管理
  13. Unity 调用C# Speech类将文字转换为语音
  14. 公众号怎么设置滑动文字_微信公众号滑动文字怎么制作内容呢?
  15. 单例模式《单例模式概念、什么时候能用到单例模式、单例模式的好处》
  16. 关于 webview 截图 部分显示空白的处理
  17. rk3399 中间层移除短按power息屏待机+永不深度睡眠
  18. 《方块方舟》自定义服务器工具,新闻-方块方舟官网-ARK正版授权-开放式体素沙盒生存游戏...
  19. 线下商店如何转型做新零售 怎么样顺利开展新零售模式?
  20. imperva CDN的优势有哪些

热门文章

  1. nginx: [error] invalid PID number ““ in “/app/nginx-1.16.0/logs/nginx.pid“
  2. Android开发经验谈-很少有人会告诉你的Android开发基本常识,经验谈android
  3. mysql如何用_如何使用mysql
  4. java 刻度尺,jQuery实现腾讯信用界面(自制刻度尺)样式
  5. mysql从一台电脑迁移_mysql数据库迁移到另一台电脑上
  6. 二手车交易价格预测 (数据分析)————task(2)
  7. 读源码:PopupWindow
  8. 从零学习 InfiniBand-network架构(七) ——IB协议中数据如何传输
  9. HEVC代码学习13:predInterSearch函数
  10. folder.htt