private int Prim(WeightedNode <T> source, List <WeightedEdge <T> > listEdge, ref int count) { source.IsSeen = true; foreach (var item in source.Edges) { if (!item.Node.IsSeen) { listEdge.Add(item); } } if (listEdge.Count == 0) { return(0); } WeightedEdge <T> tempEdge = listEdge[0]; WeightedNode <T> tempNode = listEdge[0].Node; int tempCount = 0; for (int i = 0; i < listEdge.Count; i++) { if (!listEdge[i].Node.IsSeen && listEdge[i].Weight <= tempEdge.Weight) { tempEdge = listEdge[i]; tempNode = listEdge[i].Node; tempCount = listEdge[i].Weight; } else if (listEdge[i].Node.IsSeen) { listEdge.RemoveAt(i); } } listEdge.Remove(tempEdge); count += tempCount; if (tempNode != null) { Prim(tempNode, listEdge, ref count); } return(count); }
public void Connect(T v1, T v2, int weight) { WeightedNode <T> node1 = null; WeightedNode <T> node2 = null; foreach (var item in Vertices) { if (v1.Equals(item.Value)) { node1 = item; } if (v2.Equals(item.Value)) { node2 = item; } } if (node1 == null) { node1 = new WeightedNode <T>(v1); Vertices.Add(node1); Count++; } if (node2 == null) { node2 = new WeightedNode <T>(v2); Vertices.Add(node2); Count++; } WeightedEdge <T> node1Edge = new WeightedEdge <T>(weight, node2); WeightedEdge <T> node2Edge = new WeightedEdge <T>(weight, node1); node1.Edges.Add(node1Edge); node2.Edges.Add(node2Edge); }