基于Python实现迪杰斯特拉和弗洛伊德算法
作者:BUAA-XX 发布时间:2021-06-14 08:07:25
标签:python,迪杰斯特拉,弗洛伊德
图搜索之基于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))
来源:https://blog.csdn.net/sinat_33829806/article/details/54487424


猜你喜欢
- 效果图:代码如下:<!DOCTYPE html><html><head> <meta
- 在一篇文章 理解Python异步编程的基本原理 这篇文章中,我们讲到,如果在异步代码里面又包含了一段非常耗时的同步代码,异步代码就会被卡住。
- 今天我要为大家介绍的是XPath,XPath是导航和查询XML文档的语言。我们从一个函数开始。UpdateXML()函数我们已经花了很多时间
- 以下是menu.asp代码 程序代码 <% '-----------------------------------
- 划动门菜单技术:运行代码框<style>body {font-size:12px;font-family:宋体}ul.TabBa
- 常用的python第三方库安装工具大概有三种:1、pip (分为cmd和conda)(推荐)2、easy_install &n
- Pandas处理CSV文件,分为以下几步:读取Pandas文件统计列值出现的次数筛选特定列值遍历数据行绘制直方图(柱状图)读取Pandas文
- 本文主要介绍了IDEA配置连接MYSQL数据库遇到Failed这个问题解决,分享给大家,具体如下: &nb
- 前言:Python 中的画图工具——turtle(海龟绘图),turtle 是 Python 中自带
- 先上代码,主要语句为np.where(b[c]==1),详细解释如下:import numpy as np b = np.array([[-
- 工作中遇到的,在一个.c文件中有很多函数,这个.c是自动生成的,需要将所有的函数通过extern放到.h中,每个函数都是UINT32 O_开
- 本文介绍了pandas中的series数据类型详解,分享给大家,具体如下:import pandas as pdimport numpy a
- 背景前段时间写了一个自动化安装 MySQL 的程序,其中有一个环节就是动态的渲染 my.cnf 文件;总的解决方案就是像 Django 渲染
- 首先去官网下载两个架包链接如下:官网链接第一步:将两个架包解压到同一个database目录下。如截图所示:第二步:打开setup应用程序打开
- 目录输出算法操作封装的操作含时演化算符的分解QFT的分解总结概要输出算法操作首先介绍一个最基本的使用方法,就是使用ProjectQ来打印量子
- 当今越来越多的应用程序迁移到web平台上。由于没有平台的限制和安装的要求,SAAS的模式看起来非常有吸引力。Web应用程序的界面设计,其核心
- 本文实例讲述了Python 进程操作之进程间通过队列共享数据,队列Queue。分享给大家供大家参考,具体如下:队列中的数据是放在内存中的,可
- 爬取了下小猪短租的网站出租房信息但是输出的时候是这种:百度了下。python2.7在window上的编码确实是个坑解决如下如果是个字典的话要
- 如何进行 Python 性能优化,是本文探讨的主要问题。本文会涉及常见的代码优化方法,性能优化工具的使用以及如何诊断代码的性能瓶颈等内容,希
- 如何用SQLMail建立一个电子刊物自动处理系统?下面我们用SQLMail来做一个电子刊物自动处理系统。在这个系统中,主要实现两个功能:1、