class Edge(object):
"""边"""
def __init__(self, a, b, weight):
self.a = a # 第一个顶点
self.b = b # 第二个顶点
self.weight = weight # 权值
def v(self):
return self.a
def w(self):
return self.b
def wt(self):
return self.weight
def other(self, x):
# 返回x顶点连接的另一个顶点
if x == self.a or x == self.b:
if x == self.a:
return self.b
else:
return self.a
def __lt__(self, other):
# 小于号重载
return self.weight < other.wt()
def __le__(self, other):
# 小于等于号重载
return self.weight <= other.wt()
def __gt__(self, other):
# 大于号重载
return self.weight > other.wt()
def __ge__(self, other):
# 大于等于号重载
return self.weight >= other.wt()
def __eq__(self, other):
# ==号重载
return self.weight == other.wt()
class DenseGraph(object):
"""有权稠密图 - 邻接矩阵"""
def __init__(self, n, directed):
self.n = n # 图中的点数
self.m = 0 # 图中的边数
self.directed = directed # bool值,表示是否为有向图
self.g = [[None for _ in range(n)] for _ in range(n)] # 矩阵初始化都为None的二维矩阵
def V(self):
# 返回图中点数
return self.n
def E(self):
# 返回图中边数
return self.m
def addEdge(self, v, w, weight):
# v和w中增加一条边,v和w都是[0,n-1]区间
if v >= 0 and v < n and w >= 0 and w < n:
if self.hasEdge(v, w):
self.m -= 1
self.g[v][w] = Edge(v, w, weight)
if not self.directed:
self.g[w][v] = Edge(w, v, weight)
self.m += 1
def
【算法——Python实现】有权图求单源最短路径Dijkstra算法
最新推荐文章于 2024-02-13 21:52:24 发布
本文详细介绍了如何使用Python实现Dijkstra算法,该算法是解决有权图中单源最短路径问题的经典方法。通过实例解析,帮助读者理解算法的步骤和核心逻辑,适用于网络路由、交通路径规划等领域。
摘要由CSDN通过智能技术生成