Showing
1 changed file
with
36 additions
and
3 deletions
1 | -import numpy | 1 | +import numpy as np |
2 | 2 | ||
3 | +#Kruskal Algorithm | ||
3 | parent = dict() | 4 | parent = dict() |
4 | rank = dict() | 5 | rank = dict() |
5 | 6 | ||
6 | def make_singleton_set(v) : | 7 | def make_singleton_set(v) : |
7 | parent[v] = v | 8 | parent[v] = v |
8 | - rank[v] = v | 9 | + rank[v] = 1 |
9 | 10 | ||
10 | def find(v) : | 11 | def find(v) : |
11 | if(parent[v] != v) : | 12 | if(parent[v] != v) : |
... | @@ -31,4 +32,36 @@ def Kruskal(graph) : | ... | @@ -31,4 +32,36 @@ def Kruskal(graph) : |
31 | edge_list = list(graph['edges']) | 32 | edge_list = list(graph['edges']) |
32 | edge_list.sort() | 33 | edge_list.sort() |
33 | 34 | ||
34 | - F = [] | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
35 | + F = set() | ||
36 | + | ||
37 | + index = 0 | ||
38 | + while len(F) < n - 1 : | ||
39 | + e = edge_list[index] | ||
40 | + | ||
41 | + p = find(e[1]) | ||
42 | + q = find(e[2]) | ||
43 | + | ||
44 | + if(p == q) : | ||
45 | + union(p, q) | ||
46 | + F.add(e) | ||
47 | + index += 1 | ||
48 | + | ||
49 | + return F | ||
50 | + | ||
51 | +graph = { | ||
52 | + 'vertices': ['A', 'B', 'C', 'D', 'E'], | ||
53 | + 'edges': set([ | ||
54 | + (1, 'A', 'B'), | ||
55 | + (3, 'A', 'C'), | ||
56 | + (3, 'B', 'C'), | ||
57 | + (6, 'B', 'D'), | ||
58 | + (4, 'C', 'D'), | ||
59 | + (2, 'C', 'E'), | ||
60 | + (5, 'D', 'E'), | ||
61 | + ]) | ||
62 | + } | ||
63 | +for i in range(0, 5) : | ||
64 | + make_singleton_set(i) | ||
65 | + | ||
66 | +mst = Kruskal(graph) | ||
67 | +print(mst) | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment