基于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使用urllib2提交http post请求的方法
May 26 Python
Python通过正则表达式选取callback的方法
Jul 18 Python
tensorflow实现对图片的读取的示例代码
Feb 12 Python
Python多线程编程之多线程加锁操作示例
Sep 06 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
使用 python pyautogui实现鼠标键盘控制功能
Aug 04 Python
Python序列类型的打包和解包实例
Dec 21 Python
python matplotlib中的subplot函数使用详解
Jan 19 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
python 模拟登陆163邮箱
Dec 15 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
PHP5 安装方法
2006/10/09 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
2015/11/30 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
python交互界面的退出方法
2019/02/16 Python
python字典嵌套字典的情况下找到某个key的value详解
2019/07/10 Python
Django实现发送邮件功能
2019/07/18 Python
python实现井字棋小游戏
2020/03/04 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
考试作弊被抓检讨书
2014/01/10 职场文书
大学生读书笔记大全
2015/07/01 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android
你知道Java Spring的两种事务吗
2022/03/16 Java/Android