基于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 24 Python
分享vim python缩进等一些配置
Jul 02 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
Python Flask框架模板操作实例分析
May 03 Python
numpy数组之存取文件的实现示例
May 24 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
python数据分析:关键字提取方式
Feb 24 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 Python
Python爬虫实现HTTP网络请求多种实现方式
Jun 19 Python
python 浮点数四舍五入需要注意的地方
Aug 18 Python
什么是Python包的循环导入
Sep 08 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
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
php 文章采集正则代码
2009/12/28 PHP
php图像处理类实例
2015/07/28 PHP
教大家制作简单的php日历
2015/11/17 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
jquery入门—访问DOM对象方法
2013/01/07 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
jquery获取radio值实例
2014/10/16 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
python 自定义对象的打印方法
2019/01/12 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
外贸业务员岗位职责
2013/11/24 职场文书
验房委托书
2014/08/30 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js