public void Kruskal() { while (NotUsedPoints.Count > 0) { GraphEdge minEdge = NotUsedEdges[0]; for (int i = 0; i < NotUsedEdges.Count; ++i) { if (minEdge.Weight > NotUsedEdges[i].Weight) { minEdge = NotUsedEdges[i]; } } if (!UsedPoints.Contains(minEdge.Point1) || !UsedPoints.Contains(minEdge.Point2)) { SpanningTree.Add(minEdge); if (!UsedPoints.Contains(minEdge.Point1)) { UsedPoints.Add(minEdge.Point1); NotUsedPoints.Remove(minEdge.Point1); } if (!UsedPoints.Contains(minEdge.Point2)) { UsedPoints.Add(minEdge.Point2); NotUsedPoints.Remove(minEdge.Point2); } } NotUsedEdges.Remove(minEdge); } }
public void Prim() { Random rnd = new Random(); UsedPoints.Add(rnd.Next(0, NotUsedPoints.Count - 1)); NotUsedPoints.RemoveAt(UsedPoints[0]); while (NotUsedPoints.Count > 0) { int minEdge = -1; for (int i = 0; i < NotUsedEdges.Count; ++i) { if ((UsedPoints.Contains(NotUsedEdges[i].Point1) && !UsedPoints.Contains(NotUsedEdges[i].Point2)) || (UsedPoints.Contains(NotUsedEdges[i].Point2) && !UsedPoints.Contains(NotUsedEdges[i].Point1))) { if (minEdge != -1) { if (NotUsedEdges[i].Weight < NotUsedEdges[minEdge].Weight) { minEdge = i; } } else { minEdge = i; } } } if (minEdge == -1) { break; } if (UsedPoints.Contains(NotUsedEdges[minEdge].Point1)) { UsedPoints.Add(NotUsedEdges[minEdge].Point2); NotUsedPoints.Remove(NotUsedEdges[minEdge].Point2); } else { UsedPoints.Add(NotUsedEdges[minEdge].Point1); NotUsedPoints.Remove(NotUsedEdges[minEdge].Point1); } SpanningTree.Add(NotUsedEdges[minEdge]); NotUsedEdges.RemoveAt(minEdge); } }