public static int ReachableFrom(DirectedGraph g)
        {
            for (int i = 0; i < g.g.Length; i++)
            {
                Algorithms.Dfs dfs = new Algorithms.Dfs(g, i);
                //if (dfs.GetResult())
                //{
                //    return i + 1;
                //}

                bool res = true;
                for (int j = 0; j < dfs.marked.Length; j++)
                {
                    if (dfs.marked[j] == false)
                    {
                        res = false;
                        break;
                    }
                }
                if (res)
                {
                    return(i + 1);
                }
            }
            return(-1);
        }
        public static int ReachableFrom(DirectedGraph g)
        {
            for (int i = 0; i < g.g.Length; i++)
            {
                Algorithms.Dfs dfs = new Algorithms.Dfs(g, i);
                //if (dfs.GetResult())
                //{
                //    return i + 1;
                //}

                bool res = true;
                for (int j = 0; j < dfs.marked.Length; j++)
                {
                    if (dfs.marked[j] == false)
                    {
                        res = false;
                        break;
                    }
                }
                if (res)
                {
                    return i + 1;
                }
            }
            return -1;
        }