基于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处理cookie详解
Feb 07 Python
python简单实现旋转图片的方法
May 30 Python
Django验证码的生成与使用示例
May 20 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
Jan 29 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
Python高级特性与几种函数的讲解
Mar 08 Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 Python
python 两个一样的字符串用==结果为false问题的解决
Mar 12 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
python3跳出一个循环的实例操作
Aug 18 Python
python 如何快速复制序列
Sep 07 Python
PyQt5实现多张图片显示并滚动
Jun 11 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
基于pear auth实现登录验证
2010/02/26 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
PHP字符串与数组处理函数用法小结
2020/01/07 PHP
jQuery 连续列表实现代码
2009/12/21 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
python存储16bit和32bit图像的实例
2018/12/05 Python
python语言元素知识点详解
2019/05/15 Python
python如何制作英文字典
2019/06/25 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
JPA面试常见问题
2016/11/14 面试题
酒店出纳岗位职责
2013/12/29 职场文书
迟到检讨书1000字
2014/01/15 职场文书
感恩节红领巾广播稿
2014/02/11 职场文书
静心口服夜广告词
2014/03/20 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
离婚律师函范本
2015/05/27 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
python实现A*寻路算法
2021/06/13 Python