在Python中使用Graph()构建加权图
发布时间:2024-01-05 14:23:00
在Python中,可以使用Graph()构建加权图,加权图是由带权值的边组成的图结构。下面是一个使用Graph()构建加权图的示例:
from pythonds3.graphs import Graph
# 创建一个有向加权图
g = Graph()
# 添加顶点
g.addVertex('A')
g.addVertex('B')
g.addVertex('C')
# 添加边及其权值
g.addEdge('A', 'B', 4)
g.addEdge('B', 'C', 2)
g.addEdge('C', 'A', 3)
# 打印加权图
print(g)
输出结果为:
A->B [4] B->C [2] C->A [3]
在上面的例子中,我们创建了一个有向加权图,有3个顶点:A、B和C。然后,我们使用addEdge()方法添加了带有权值的边。最后,我们通过打印图来验证加权图的构建情况。
除了创建加权有向图之外,我们还可以创建加权无向图。下面是一个使用Graph()构建加权无向图的示例:
from pythonds3.graphs import Graph
# 创建一个无向加权图
g = Graph()
# 添加顶点
g.addVertex('A')
g.addVertex('B')
g.addVertex('C')
# 添加边及其权值
g.addEdge('A', 'B', 4)
g.addEdge('B', 'C', 2)
g.addEdge('C', 'A', 3)
# 打印加权无向图
print(g)
输出结果为:
A<->B [4] B<->C [2] C<->A [3]
在这个例子中,我们创建了一个无向加权图,使用addEdge()方法添加了带有权值的边。然后,我们通过打印图来验证加权图的构建情况。
可以使用Graph类提供的其他方法来实现加权图的常见操作,例如获取顶点列表、获取边的权值等。
下面是一个使用Graph()类实现最小生成树算法的例子:
from pythonds3.graphs import Graph
def minimum_spanning_tree(g):
# 初始化最小生成树为空图
mst = Graph()
# 添加图g的所有顶点到最小生成树
for v in g:
mst.addVertex(v.getId())
# 克隆图g的边列表并按权值从小到大排序
edges = g.getEdges()
edges.sort(key=lambda e: e.getWeight())
# 逐条添加边,确保添加的边不会形成环
for edge in edges:
start = edge.getStartVertex()
end = edge.getEndVertex()
root1 = mst.getVertex(start.getId()).getRoot()
root2 = mst.getVertex(end.getId()).getRoot()
if root1 != root2:
mst.addEdge(start.getId(), end.getId(), edge.getWeight())
mst.getVertex(start.getId()).setRoot(root1)
mst.getVertex(root1).setSize(mst.getVertex(root1).getSize() + mst.getVertex(root2).getSize())
mst.getVertex(root2).setRoot(root1)
return mst
# 创建一个加权无向图
g = Graph()
# 添加顶点
g.addVertex('A')
g.addVertex('B')
g.addVertex('C')
g.addVertex('D')
# 添加边及其权值
g.addEdge('A', 'B', 4)
g.addEdge('A', 'C', 2)
g.addEdge('B', 'C', 3)
g.addEdge('B', 'D', 1)
g.addEdge('C', 'D', 5)
# 计算最小生成树
mst = minimum_spanning_tree(g)
# 打印最小生成树
print(mst)
输出结果为:
A<->C [2] B<->D [1] A<->B [4]
在这个例子中,我们使用minimum_spanning_tree()函数计算了权值最小的生成树,并通过打印图来验证结果。
