基于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中的Null模式与桥接模式编程
Feb 02 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
Nov 02 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
python 实现判断ip连通性的方法总结
Apr 22 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
Python 实现黑客帝国中的字符雨的示例代码
Feb 20 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
学习Python需要哪些工具
Sep 04 Python
python 检测nginx服务邮件报警的脚本
Dec 31 Python
Python基础学习之奇异的GUI对话框
May 27 Python
python库Tsmoothie模块数据平滑化异常点抓取
Jun 10 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/11/16 PHP
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
pytorch __init__、forward与__call__的用法小结
2021/02/27 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
最新自我评价范文
2013/11/16 职场文书
化学教师自荐信范文
2013/12/28 职场文书
优秀医生事迹材料
2014/02/12 职场文书
药店促销活动总结
2014/07/10 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
酒店员工管理制度
2015/08/05 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
Python入门学习之类的相关知识总结
2021/05/25 Python