Skip to content

Instantly share code, notes, and snippets.

@DanielNill
Last active June 18, 2019 00:03
Show Gist options
  • Select an option

  • Save DanielNill/f7ab7223254b8015de93c526ae0ac3c7 to your computer and use it in GitHub Desktop.

Select an option

Save DanielNill/f7ab7223254b8015de93c526ae0ac3c7 to your computer and use it in GitHub Desktop.
class Graph(object):
def __init__(self, g, v):
self.g = g
self.v = v
self.adj = []
for i in range(self.v):
self.adj.append([])
for i in range(self.v):
for j in range(self.v):
self.adj[i].append(0)
for g in self.g:
self.adj[g[0]][g[1]] = g[2]
self.adj[g[1]][g[0]] = g[2]
def prims(self):
vert = 0
mst = []
edges = []
visited = []
min_edge = [None, None, float("inf")]
while len(mst) != self.v - 1:
visited.append(vert)
for v in range(self.v):
if self.adj[vert][v] != 0:
edges.append([vert, v, self.adj[vert][v]])
for edge in edges:
if edge[2] < min_edge[2] and edge[1] not in visited:
min_edge = edge
edges.remove(min_edge)
mst.append(min_edge)
vert = min_edge[1]
min_edge = [None, None, float("inf")]
return mst
g = Graph([[0,1,2], [0,2,3], [1,3,3], [1,2,5], [1,4,4], [2,4,4], [3,4,2], [3,5,3], [4,5,5]], 6)
print(g.prims())
# [[0, 1, 2], [0, 2, 3], [1, 3, 3], [3, 4, 2], [3, 5, 3]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment