Вы находитесь на странице: 1из 3

#----------------------------------------------------------------------------------

----------------------
#Algoritmo de Kruskal en Python.
#----------------------------------------------------------------------------------
----------------------

#Clase Grafo.
class Graph:
def __init__(self, vertices):
self.V = vertices
self.graph = []

def add_edge(self, u, v, w):


self.graph.append([u, v, w])

#Función buscar.
def find(self, parent, i):
if parent[i] == i:
return i
return self.find(parent, parent[i])

def apply_union(self, parent, rank, x, y):


xroot = self.find(parent, x)
yroot = self.find(parent, y)
if rank[xroot] < rank[yroot]:
parent[xroot] = yroot
elif rank[xroot] > rank[yroot]:
parent[yroot] = xroot
else:
parent[yroot] = xroot
rank[xroot] += 1

#Aplicar algoritmo de Kruskal.


def kruskal_algo(self):
result = []
i, e = 0, 0
self.graph = sorted(self.graph, key=lambda item: item[2])
parent = []
rank = []
for node in range(self.V):
parent.append(node)
rank.append(0)
while e < self.V - 1:
u, v, w = self.graph[i]
i = i + 1
x = self.find(parent, u)
y = self.find(parent, v)
if x != y:
e = e + 1
result.append([u, v, w])
self.apply_union(parent, rank, x, y)
for u, v, weight in result:
print("%d - %d: %d" % (u, v, weight))

g = Graph(12)

#Para el nodo 0.
g.add_edge(0, 1, 48)
g.add_edge(0, 2, 40)
g.add_edge(0, 3, 30)

#Para el nodo 1.
g.add_edge(1, 0, 48)
g.add_edge(1, 4, 8)
g.add_edge(1, 5, 6)

#Para el nodo 2.
g.add_edge(2, 0, 40)
g.add_edge(2, 4, 16)
g.add_edge(2, 6, 10)

#Para el nodo 3.
g.add_edge(3, 0, 30)
g.add_edge(3, 5, 24)
g.add_edge(3, 6, 20)
g.add_edge(3, 7, 15)

#Para el nodo 4.
g.add_edge(4, 1, 8)
g.add_edge(4, 2, 16)
g.add_edge(4, 8, 2)

#Para el nodo 5.
g.add_edge(5, 1, 6)
g.add_edge(5, 3, 24)
g.add_edge(5, 8, 4)
g.add_edge(5, 9, 3)

#Para el nodo 6.
g.add_edge(6, 2, 10)
g.add_edge(6, 3, 20)
g.add_edge(6, 8, 8)
g.add_edge(6, 10, 5)

#Para el nodo 7.
g.add_edge(7, 3, 15)
g.add_edge(7, 9, 12)
g.add_edge(7, 10, 10)

#Para el nodo 8.
g.add_edge(8, 4, 2)
g.add_edge(8, 5, 4)
g.add_edge(8, 6, 8)
g.add_edge(8, 11, 1)

#Para el nodo 9.
g.add_edge(9, 5, 3)
g.add_edge(9, 7, 12)
g.add_edge(9, 11, 2)

#Para el nodo 10.


g.add_edge(10, 6, 5)
g.add_edge(10, 7, 10)
g.add_edge(10, 11, 4)

#Para el nodo 11.


g.add_edge(11, 8, 1)
g.add_edge(11, 9, 2)
g.add_edge(11, 10, 4)

g.kruskal_algo()

Вам также может понравиться