课设:无人驾驶车辆管理系统(基于pyqt5开发,最短路径算法)
发布时间
阅读量:
阅读量
一、效果演示
可实现动态移动
有源代码zip文件上传资源了,但是不知道怎么添文件链接,感兴趣的可以私信我,免费的
首先车辆有两种类型“绿”和“橙色”
二、python的迪杰克斯拉算法展示,适用于单源寻找最短路径,可以根据一个字符找到其他点的最短路径,其中rode_name是按循序排好的字符串列表,rode是对应的邻接矩阵。
def go_to(self,point: str):
"""用此方法可以返回节点名字为point与其它节点的最短距离,最短路径
返回两个数 使用示例: length,way=rode.go_to("d")
length为字典,格式 {名字:最短路径长度}
way为字典,格式{名字:起点->中间节点->终点}
"""
# S[]中1表示节点在已找到最短路径中,0表示不在最短路径中
# 初始化S[]
S = []
for x in self.rode_name:
if x != point:
S.append(0)
else:
S.append(1)
dist = deepcopy(self.rode[self.rode_name.index(point)])
# 路径长度l初始化,如果不是0则它的前面的节点为point,是的话赋值"0"
path = []
for x in self.rode[self.rode_name.index(point)]:
if x != 0 and x < Maxnum:
path.append(self.rode_name.index(point))
else:
path.append(-1)
path_length = {}
# 循环n-1次
for i in range(len(S) - 1):
min_ = Maxnum
# 选取不在图中的最短的u
for j in range(len(S)):
if S[j] == 0 and dist[j] < min_:
u = j
min_ = dist[j]
S[u] = 1 # 添加顶点u
# 修改最短路经
for j in range(len(S)):
if S[j] == 0:
k = dist[u] + self.rode[u][j]
if self.rode[u][j] < Maxnum and k < dist[j]:
dist[j] = k
path[j] = u
path_length,path_ = self.Dispath(dist, path, S,self.rode_name.index(point))
#补充自身节点
path_length[point]=0
path_[point]=f"{point}"
return path_length,path_
def Dispath(self,dist: list,path: list, S, v: int) :
"""go_to的补充"""
path_length = {}
path_={}
result=""
for i in range(len(self.rode_name)):
path_length[self.rode_name[i]] = dist[i]
# 输出单源的最短路径详细信息
apath = []
for i in range(len(S)):
if S[i] == 1 and i != v:
#print(f"从顶点{self.rode_name[v]}到顶点{self.rode_name[i]}的路径长度为{dist[i]}")
d = 0
apath.append(self.rode_name[i]) # 终点为i
k = path[i]
if k == -1:
path_[self.rode_name[i]]="无路径"
else:
while (k != v):
d += 1
apath.append(self.rode_name[k])
k = path[k]
d += 1
apath.append(self.rode_name[k]) # 添加起点
result=f"{apath[d]}->"
for j in sorted(range(d), reverse=True):
result+=f"{apath[j]}->"
path_[self.rode_name[i]] = result[:-2]
apath = []
return path_length,path_
三、邻接矩阵的生成算法
文件格式

对应算法
def input(self,filename):
#根据文件生成Rode
self.rode=[]
with open(filename,"r",encoding="utf-8") as f:
self.rode_name=f.readline().strip().split(",")
lines=f.readlines()
i=-1
for line in lines:
line_ls=line.strip().split(",")
rode = {}
for str_ in line_ls:
k,v=str_.split(":")
rode[k]=float(v)
node=[Maxnum for x in range(len(self.rode_name))]
i+=1
node[i]=0
for k,v in rode.items():
node[self.rode_name.index(k)]=v
self.rode.append(node)
三、类结构图

四、遇到的问题和解决方案
高分辨率电脑显示的问题
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)#解决高分辨率的问题
打包中遇到的坑
主要是路径问题,需要将引用的路径换成当前工作目录加文件名
全部评论 (0)
还没有任何评论哟~
