示例#1
0
    internal EdgeKind GetEdgeKind(Vector2 point)
    {
        if (EdgeA.Contains(point))
        {
            return(EdgeKind.A);
        }
        if (EdgeB.Contains(point))
        {
            return(EdgeKind.B);
        }
        if (EdgeC.Contains(point))
        {
            return(EdgeKind.C);
        }
        if (EdgeD.Contains(point))
        {
            return(EdgeKind.D);
        }

        return(EdgeKind.None);
    }
示例#2
0
        public static Microsoft.Msagl.Drawing.Graph Kruskal(Graph graph)
        {
            int verticesCount = graph.VerticesCount;

            EdgeB[] result = new EdgeB[verticesCount];
            int     i      = 0;
            int     e      = 0;

            Array.Sort(graph.edge, delegate(EdgeB a, EdgeB b)
            {
                return(a.Weight.CompareTo(b.Weight));
            });

            Subset[] subsets = new Subset[verticesCount];

            for (int v = 0; v < verticesCount; ++v)
            {
                subsets[v].Parent = v;
                subsets[v].Rank   = 0;
            }

            while (e < verticesCount - 1)
            {
                EdgeB nextEdge = graph.edge[i++];
                int   x        = Find(subsets, nextEdge.Source);
                int   y        = Find(subsets, nextEdge.Destination);

                if (x != y)
                {
                    result[e++] = nextEdge;
                    Union(subsets, x, y);
                }
            }

            return(Print(result, e));
        }