Ya no tienes que investigar más en otras páginas ya que llegaste al espacio correcto, tenemos la respuesta que buscas pero sin liarte.
Ejemplo 1: Python del algoritmo de prim
def empty_graph(n):
res =[]for i in range(n):
res.append([0]*n)return res
def convert(graph):
matrix =[]for i in range(len(graph)):
matrix.append([0]*len(graph))for j in graph[i]:
matrix[i][j]=1return matrix
def prims_algo(graph):
graph1 =convert(graph)
n =len(graph1)
tree =empty_graph(n)
con =[0]whilelen(con)< n :
found = False
for i in con:for j in range(n):if j not in con and graph1[i][j]==1:
tree[i][j]=1
tree[j][i]=1
con +=[j]
found = True
breakif found :breakreturn tree
matrix =[[0,1,1,1,0,1,1,0,0],[1,0,0,1,0,0,1,1,0],[1,0,0,1,0,0,0,0,0],[1,1,1,0,1,0,0,0,0],[0,0,0,1,0,1,0,0,1],[1,0,0,0,1,0,0,0,1],[1,1,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0,0],[0,0,0,0,1,1,0,0,0]]
lst =[[1,2,3,5,6],[0,3,6,7],[0,3],[0,1,2,4],[3,5,8],[0,4,8],[0,1],[1],[4,5]]print("From graph to spanning tree:n")print(prims_algo(lst))
Ejemplo 2: árbol de expansión mínimo de prims
import math
def empty_tree(n):
lst =[]for i in range(n):
lst.append([0]*n)return lst
def min_extension(con,graph,n):
min_weight = math.inf
for i in con:for j in range(n):if j not in con and0< graph[i][j]< min_weight:
min_weight = graph[i][j]
v,w = i,j
return v,w
def min_span(graph):
con =[0]
n =len(graph)
tree =empty_tree(n)whilelen(con)< n :
i ,j =min_extension(con,graph,n)
tree[i][j],tree[j][i]= graph[i][j], graph[j][i]
con +=[j]return tree
def find_weight_of_edges(graph):
tree =min_span(graph)
lst =[]
lst1 =[]
x =0for i in tree:
lst += i
for i in lst:if i not in lst1:
lst1.append(i)
x += i
return x
graph =[[0,1,0,0,0,0,0,0,0],[1,0,3,4,0,3,0,0,0],[0,3,0,0,0,4,0,0,0],[0,4,0,0,2,9,1,0,0],[0,0,0,2,0,6,0,0,0],[0,3,4,9,6,0,0,0,6],[0,0,0,1,0,0,0,2,8],[0,0,0,0,0,0,2,0,3],[0,0,0,0,0,6,8,3,0]]
graph1 =[[0,3,5,0,0,6],[3,0,4,1,0,0],[5,4,0,4,5,2],[0,1,4,0,6,0],[0,0,5,6,0,8],[6,0,2,0,8,0]]print(min_span(graph1))print("Total weight of the tree is: "+str(find_weight_of_edges(graph1)))
valoraciones y comentarios
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)