基于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中List.count()方法的使用教程
May 20 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
Python中easy_install 和 pip 的安装及使用
Jun 05 Python
Python上下文管理器和with块详解
Sep 09 Python
答题辅助python代码实现
Jan 16 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
jupyter notebook的安装与使用详解
May 18 Python
python如何删除文件、目录
Jun 23 Python
Pycharm调试程序技巧小结
Aug 08 Python
Python数据结构之队列详解
Mar 21 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
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
PHP速成大法
2015/01/30 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
如何打开php的gd2库
2017/02/09 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
项目实践之javascript技巧
2007/12/06 Javascript
extjs form textfield的隐藏方法
2008/12/29 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
使用django自带的user做外键的方法
2020/11/30 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
师德师风自查材料
2014/10/14 职场文书
2014个人年度工作总结
2014/12/15 职场文书
校车安全管理责任书
2015/05/11 职场文书
入学证明
2015/06/23 职场文书
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers