基于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实现的求解最小公倍数算法示例
May 03 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
Python数据分析matplotlib设置多个子图的间距方法
Aug 03 Python
Python实现打砖块小游戏代码实例
May 18 Python
Python函数中参数是传递值还是引用详解
Jul 02 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
python3.x中安装web.py步骤方法
Jun 23 Python
python 生成器需注意的小问题
Sep 29 Python
python两种注释用法的示例
Oct 09 Python
Python turtle实现贪吃蛇游戏
Jun 18 Python
详解在OpenCV中如何使用图像像素
Mar 03 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
图形数字验证代码
2006/10/09 PHP
关于在php.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
php 使用post,get的一种简洁方式
2010/04/25 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
php链式操作的实现方式分析
2019/08/12 PHP
js不是基础的基础
2006/12/24 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
python学习数据结构实例代码
2015/05/11 Python
wxPython之解决闪烁的问题
2018/01/15 Python
对Python中内置异常层次结构详解
2018/10/18 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
python编写计算器功能
2019/10/25 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
大专生简历的自我评价
2013/11/26 职场文书
11月红领巾广播稿
2014/01/17 职场文书
对公司合理化的建议书
2014/03/12 职场文书
产品质量保证书
2014/04/29 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript