基于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 Sql数据库增删改查操作简单封装
Apr 18 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
Python解析并读取PDF文件内容的方法
May 08 Python
pandas 读取各种格式文件的方法
Jun 22 Python
Tesserocr库的正确安装方式
Oct 19 Python
使用python的pexpect模块,实现远程免密登录的示例
Feb 14 Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 Python
Pycharm中切换pytorch的环境和配置的教程详解
Mar 13 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 Python
Python anaconda安装库命令详解
Oct 16 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 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
Banner程序
2006/10/09 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
nginx 设置多个站跨域
2021/03/09 Servers
jquery之Document元素选择器篇
2008/08/14 Javascript
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
Python datetime时间格式化去掉前导0
2014/07/31 Python
Python中的字符串查找操作方法总结
2016/06/27 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
python3.4爬虫demo
2019/01/22 Python
Django 请求Request的具体使用方法
2019/11/11 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
社区健康教育实施方案
2014/03/18 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
银行求职信范文
2014/05/26 职场文书
甜品店创业计划书
2014/09/21 职场文书
公司市场部岗位职责
2015/04/15 职场文书
面试通知短信
2015/04/20 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS
Redis特殊数据类型bitmap位图
2022/06/01 Redis
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL