박권수

feature1.0.2 : finish Kruskal Algorithm = complete assignment5-1

......@@ -4,15 +4,18 @@ import numpy as np
parent = dict()
rank = dict()
#초기화 함수이다.
def make_singleton_set(v) :
parent[v] = v
rank[v] = 0
#해당 노드를 가지고 있는 집합을 리턴한다.
def find(v) :
if(parent[v] != v) :
parent[v] = find(parent[v])
return parent[v]
#r1, r2 집합을 합집합 연산한다.
def union(r1, r2) :
if(r1 != r2) :
if(rank[r1] > rank[r2]) :
......@@ -25,7 +28,6 @@ def union(r1, r2) :
def Kruskal(graph) :
#n = 정점의 수 / m = 엣지의 수
n = len(graph['vertices'])
m = len(graph['edges'])
#엣지를 전부 찾은 후 비내림차순으로 정렬한다.
edge_list = list(graph['edges'])
......@@ -35,22 +37,29 @@ def Kruskal(graph) :
for v in graph['vertices'] :
make_singleton_set(v)
#리턴할 edges 집합
F = set()
index = 0
while len(F) <= n - 1 :
while len(F) < n - 1 :
#e = edges 이음선
e = edge_list[index]
#p , q는 각각의 집합들을 가리키는 포인터이다.
p = find(e[1])
q = find(e[2])
if(p == q) :
#만약 p와 q가 다른 집합이면 서로를 합집합한다.
if(p != q) :
union(p, q)
F.add(e)
index += 1
index += 1
return F
#Kruskal Algorithm
graph = {
'vertices': ['A', 'B', 'C', 'D', 'E'],
'edges': set([
......@@ -65,4 +74,4 @@ graph = {
}
mst = Kruskal(graph)
print(mst)
\ No newline at end of file
print('Kruskal Algorithm : ', "\n", mst)
\ No newline at end of file
......