/// <summary>
        /// Creates a random minimum spannig tree (this ensures that the graph will be connected).
        /// </summary>
        /// <returns></returns>
        private static NList <NPointI> GetRandomMST(int vertexCount)
        {
            int             i, v1, v2;
            Random          random         = new Random();
            NList <NPointI> edges          = new NList <NPointI>();
            NList <int>     usedVertices   = new NList <int>();
            NList <int>     unusedVertices = new NList <int>(vertexCount);

            for (i = 0; i < vertexCount; i++)
            {
                unusedVertices.Add(i);
            }

            // Determine the root
            v1 = random.Next(vertexCount);
            usedVertices.Add(v1);
            unusedVertices.RemoveAt(v1);

            for (i = 1; i < vertexCount; i++)
            {
                v1 = random.Next(usedVertices.Count);
                v2 = random.Next(unusedVertices.Count);
                edges.Add(new NPointI(usedVertices[v1], unusedVertices[v2]));

                usedVertices.Add(unusedVertices[v2]);
                unusedVertices.RemoveAt(v2);
            }

            return(edges);
        }