基于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实现从ftp服务器下载文件的方法
Apr 30 Python
Django自定义分页与bootstrap分页结合
Feb 22 Python
Python logging管理不同级别log打印和存储实例
Jan 19 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
python 求定积分和不定积分示例
Nov 20 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 Python
Python爬虫程序架构和运行流程原理解析
Mar 09 Python
python怎么调用自己的函数
Jul 01 Python
python openCV实现摄像头获取人脸图片
Aug 20 Python
基于PyTorch中view的用法说明
Mar 03 Python
Python编程super应用场景及示例解析
Oct 05 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 fsockopen写的HTTP下载的类
2007/02/22 PHP
php array_flip() 删除数组重复元素
2009/01/14 PHP
php 显示指定路径下的图片
2009/10/29 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
javascript hashtable 修正版 下载
2010/12/30 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
python多线程扫描端口示例
2014/01/16 Python
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
详解python 注释、变量、类型
2018/08/10 Python
python3使用pandas获取股票数据的方法
2018/12/22 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
eBay奥地利站:eBay.at
2019/07/24 全球购物
完美主义个人的自我评价
2014/02/17 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
交通事故案件代理词
2015/05/23 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers