基于Python实现迪杰斯特拉和弗洛伊德算法


Posted in Python onMay 27, 2020

图搜索之基于Python的迪杰斯特拉算法和弗洛伊德算法,供大家参考,具体内容如下

Djstela算法

#encoding=UTF-8
MAX=9
'''
Created on 2016年9月28日
@author: sx
'''
b=999
G=[[0,1,5,b,b,b,b,b,b],\
 [1,0,3,7,5,b,b,b,b],\
 [5,3,0,b,1,7,b,b,b],\
 [b,7,b,0,2,b,3,b,b],\
 [b,5,1,2,0,3,6,9,b],\
 [b,b,7,b,3,0,b,5,b],\
 [b,b,b,3,6,b,0,2,7],\
 [b,b,b,b,9,5,2,0,4],\
 [b,b,b,b,b,b,7,4,0]]
P=[]
D=[]
def Djstela(G,P,D):
 final=[]
 for i in range(0,len(G)):
 final.append(0)
 D.append(G[0][i])
 P.append(0)
 D[0]=0
 final[0]=1
 k=0
 for v in range(1,len(G)):
 min=999
 for w in range(0,len(G)):
  if final[w]==0 and D[w]<min:
  k=w
  min=D[w]
 final[k]=1 
 for t in range(0,len(G)):
  if min+G[k][t]<D[t]:
  D[t]=min+G[k][t]
  P[t]=k
 print("\n最短路径\n",D,"\n","\n前一个选择\n",P)
def search(x):
 print("选择的终点",x,"最短路径",D[x]) 
print("邻接矩阵\n")
for i in range(0,9):
 print(G[i])
Djstela(G, P, D)
q=input("\n请输入终点")
search(int(q))

FLOYD算法

#encoding=UTF-8
'''
Created on 2016年9月28日
@author: sx
'''
t=0
b=999
G=[[0,1,5,b,b,b,b,b,b],\
 [1,0,3,7,5,b,b,b,b],\
 [5,3,0,b,1,7,b,b,b],\
 [b,7,b,0,2,b,3,b,b],\
 [b,5,1,2,0,3,6,9,b],\
 [b,b,7,b,3,0,b,5,b],\
 [b,b,b,3,6,b,0,2,7],\
 [b,b,b,b,9,5,2,0,4],\
 [b,b,b,b,b,b,7,4,0]]
P=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],\
 [0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],\
 [0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]]
D=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],\
 [0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],\
 [0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]]
def Floyd(G,P,D):
 t=0
 for u in range(0,len(G)):
 for s in range(0,len(G)):
  D[u][s]=G[u][s]  
  P[u][s]=s
 for k in range(0,len(G)):
 for v in range(0,len(G)):
  for w in range(0,len(G)):
  if D[v][w]>D[v][k]+D[k][w]:
   t=t+1
   D[v][w]=D[v][k]+D[k][w]
   P[v][w]=P[v][k]  
Floyd(G, P, D)
def search(s,u):
 lenth=D[s][u]
 print("路径长度为",lenth)
 f=P[s][u]
 foot=[s,f]
 if f==u:
 print("无需规划,0步")
 while f!=u:
 f=P[f][u] 
 foot.append(f) 
 for i in range(0,len(foot)):
 if i==0:
  print("起 点____",foot[i])
 elif i==len(foot)-1:
  print("终 点____",foot[i],"步长___",G[foot[i-1]][foot[i]])
 else:
  print("第",i,"点____",foot[i],"步长___",G[foot[i-1]][foot[i]])
print("邻接矩阵")
for i in range(0,9):
 print(G[i])
s=input("请输入起点0-8\n")
u=input("请输入终点0-8\n")
Floyd(G, P, D)
search(int(s),int(u))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现百度关键词排名查询
Mar 30 Python
python通过pil为png图片填充上背景颜色的方法
Mar 17 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
Jun 02 Python
python实现扫描ip地址的小程序
Apr 16 Python
python lxml中etree的简单应用
May 10 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
Python 统计位数为偶数的数字代码详解
Mar 15 Python
python 异步async库的使用说明
May 04 Python
Python+PyQt5实现灭霸响指功能
May 25 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
简单且有用的Python数据分析和机器学习代码
Jul 02 Python
Python中logging实例讲解
Jan 17 #Python
python矩阵/字典实现最短路径算法
Jan 17 #Python
python实现Dijkstra静态寻路算法
Jan 17 #Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 #Python
python实现dijkstra最短路由算法
Jan 17 #Python
Pycharm 设置默认头的图文教程
Jan 17 #Python
python实现狄克斯特拉算法
Jan 17 #Python
You might like
可以在线执行PHP代码包装修正版
2008/03/15 PHP
php截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
js精度溢出解决方案
2012/12/02 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
python中通过预先编译正则表达式提高效率
2017/09/25 Python
python去除扩展名的实例讲解
2018/04/23 Python
python3中property使用方法详解
2019/04/23 Python
python 将字符串完成特定的向右移动方法
2019/06/11 Python
Html5页面二次分享的实现
2018/07/30 HTML / CSS
VICHY薇姿俄罗斯官方网上商店:法国护肤品牌,火山温泉水
2019/11/22 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
交通安全演讲稿
2014/01/07 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
个人查摆剖析材料
2014/10/16 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
2015个人半年总结范文
2015/03/09 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL