您的位置 首页 知识

原神哪个角色厉害 原神里哪个角色最强

原神哪个角色厉害 原神里哪个角色最强

下面内容是使用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()

在上述代码中:

  1. 开头来说创建了一个无向图G,并添加了一些带有权重的边。
  2. 接着使用nx.minimum_spanning_tree函数(内部采用Kruskal算法)计算出图G的最小生成树mst
  3. 最终分别绘制了原始图和最小生成树图,方便直观查看结局。

如果想要使用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函数中:

  1. 开头来说初始化一些必要的变量,如已访问顶点数组visited、最小生成树边的数组mst等,并且标记第一个顶点为已访问。
  2. while循环中,不断寻找连接已访问顶点和未访问顶点之间权重最小的边,将其加入到最小生成树的边数组mst中,并标记新的顶点为已访问。
  3. 最终返回最小生成树的边数组mst