原神哪个角色厉害 原神里哪个角色最强
下面内容是使用Python语言结合networkx
库来实现计算最小生成树(以Kruskal算法为例)的示例代码:
import networkx as nx
import matplotlib.pyplot as plt
创建一个无向图
G = nx.Graph()
添加边和权重
G.add_edge('A', 'B', weight=4)
G.add_edge('A', 'C', weight=3)
G.add_edge('B', 'C', weight=1)
G.add_edge('B', 'D', weight=2)
G.add_edge('C', 'D', weight=4)
G.add_edge('D', 'E', weight=2)
G.add_edge('C', 'E', weight=5)
使用Kruskal算法计算最小生成树
mst = nx.minimum_spanning_tree(G)
绘制原始图
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True)
edge_labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
plt.title('Original Graph')
plt.show()
绘制最小生成树
pos = nx.spring_layout(mst)
nx.draw(mst, pos, with_labels=True)
edge_labels = nx.get_edge_attributes(mst, 'weight')
nx.draw_networkx_edge_labels(mst, pos, edge_labels=edge_labels)
plt.title('Minimum Spanning Tree')
plt.show()
在上述代码中:
- 开头来说创建了一个无向图
G
,并添加了一些带有权重的边。 - 接着使用
nx.minimum_spanning_tree
函数(内部采用Kruskal算法)计算出图G
的最小生成树mst
。 - 最终分别绘制了原始图和最小生成树图,方便直观查看结局。
如果想要使用Prim算法实现最小生成树,下面内容一个简单的伪代码示例:
输入:加权无向图G=(V, E)
初始化:
空的最小生成树MST = }
选择一个起始顶点v,将其加入到已访问顶点集合visited = v}
while visited集合中的顶点数 < V的顶点数:
找到一条权重最小的边(u, v),其中u在visited集合中,v不在visited集合中
将边(u, v)加入到MST中
将顶点v加入到visited集合中
输出:最小生成树MST
将上述伪代码转换为Python代码(假设图以邻接矩阵表示)如下:
import sys
def prim(graph):
num_vertices = len(graph)
记录已访问顶点
visited = [False] * num_vertices
记录最小生成树的边
mst = []
选择第一个顶点作为起始顶点
visited[0] = True
num_visited = 1
while num_visited < num_vertices:
min_weight = sys.maxsize
u = -1
v = -1
for i in range(num_vertices):
if visited[i]:
for j in range(num_vertices):
if not visited[j] and graph[i][j]!= 0:
if graph[i][j] < min_weight:
min_weight = graph[i][j]
u = i
v = j
mst.append((u, v, min_weight))
visited[v] = True
num_visited += 1
return mst
你可以使用下面内容方式调用这个函数:
graph = [
[0, 3, 0, 0, 6],
[3, 0, 1, 0, 0],
[0, 1, 0, 6, 0],
[0, 0, 6, 0, 8],
[6, 0, 0, 8, 0]
]
print(prim(graph))
在这个prim
函数中:
- 开头来说初始化一些必要的变量,如已访问顶点数组
visited
、最小生成树边的数组mst
等,并且标记第一个顶点为已访问。 - 在
while
循环中,不断寻找连接已访问顶点和未访问顶点之间权重最小的边,将其加入到最小生成树的边数组mst
中,并标记新的顶点为已访问。 - 最终返回最小生成树的边数组
mst
。