Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }