Minimum Spanning Tree Algorithms

MST-Kruskal(G,w)
	T <- Ø
	for each vertex v in V[G] do
		Make-Set(v)
	Initialize Q to priority queue using weights as keys
	while T has < n-1 edges do
		(u,v) <- Q.removeMin()
		a <- FindSet(u)
		b <- FindSet(v)
		if a ‚ b then			// if no cycle add edge
			T <- T union {(u,v)}
			Union(a,b)



MST-Prim(G,w,r)    // r is root/starting vertex in graph
	T <- Ø 
	for each vertex u do
		key[u] <- infinity
	key[r] <- 0		// key[u] is distance from u to T
	pi[r] <- Nil		// pi[u] is node in Q-V that u closest to
	Initialize Q to priority queue using key array values
	while Q ‚ Ø do
		u <- Q.removeMin()
		if pi[u] ‚ Nil then
			T <- T union {(u,pi[u])}
		for each v in Adj[u] do   // update key of u's nbrs 
			if v in Q and w(u,v) < key[v] then
				pi[v] <- u
				key[v] <- w(u,v)
				adjust Q for new key[v]