基于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操作MongoDB基础知识
Nov 01 Python
Python对象体系深入分析
Oct 28 Python
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
Python中使用gzip模块压缩文件的简单教程
Apr 08 Python
Python数据类型学习笔记
Jan 13 Python
基于python的Tkinter编写登陆注册界面
Jun 30 Python
python常用排序算法的实现代码
Nov 08 Python
浅析matlab中imadjust函数
Feb 27 Python
keras的backend 设置 tensorflow,theano操作
Jun 30 Python
pycharm 的Structure界面设置操作
Feb 05 Python
Pygame Event事件模块的详细示例
Nov 17 Python
python实现一个简单的贪吃蛇游戏附代码
Jun 28 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
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
为你总结一些php信息函数
2015/10/21 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
javascript中检测变量的类型的代码
2010/12/28 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
vue props对象validator自定义函数实例
2019/11/13 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
python轻松实现代码编码格式转换
2015/03/26 Python
python中函数默认值使用注意点详解
2016/06/01 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
Python安装selenium包详细过程
2019/07/23 Python
Django Rest framework权限的详细用法
2019/07/25 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
Python学习之time模块的基本使用
2021/01/17 Python
数据库笔试题
2013/05/09 面试题
有个性的自我评价范文
2013/11/15 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers
TS 类型收窄教程示例详解
2022/09/23 Javascript