基于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和GO语言实现的消息摘要算法示例
Mar 10 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
Python网络编程之TCP套接字简单用法示例
Apr 09 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
Apr 19 Python
python交互界面的退出方法
Feb 16 Python
详解python tkinter教程-事件绑定
Mar 28 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 Python
python模拟菜刀反弹shell绕过限制【推荐】
Jun 25 Python
简单了解python单例模式的几种写法
Jul 01 Python
在python中对于bool布尔值的取反操作
Dec 11 Python
pandas 操作 Excel操作总结
Mar 31 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 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
克隆一个新项目的快捷方式
2013/04/10 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
简单实现php上传文件功能
2017/09/21 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
详解javascript中对数据格式化的思考
2017/01/23 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
使用python 3实现发送邮件功能
2018/06/15 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
python连接PostgreSQL过程解析
2020/02/09 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
Python调用C/C++的方法解析
2020/08/05 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
Java文件和目录(IO)操作
2014/08/26 面试题
求职简历中个人的自我评价
2013/12/01 职场文书
函授药学自我鉴定
2014/02/07 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书