Пример #1
0
 /// <summary>
 /// به وسیله ی صدا زدن کروسکال بالا آن را پرنت می کند
 /// </summary>
 /// <param name="graph"></param>
 public static void print(Graph.G_LinkedListForm <T> graph)
 {
     foreach (var VARIABLE in Kruskal <T> .KruskalUseTreeDisjointSt(graph))
     {
         Console.WriteLine(VARIABLE.FirstVertex.Data + "------" + VARIABLE.SecondVertex.Data);
     }
 }
Пример #2
0
        /// <summary>
        /// ابتدا یال های گراف را بر اساس صعودی مرتب می کنیم (برای نزولی می توان در تری فورم کامپیر تو را تغیر داد یا متد زیر را به وسیله ی معکوس کردن نزولی کرد
        /// سپس لیستی از نود ها درخت می سازیم و هر سری یک پارت به وسیله ی میک دیسجوین ست درست می کنیم و در آن می ریزیم می دانیم نود نامبر ها همان ایندکس های تمپ ورتکست نیز هستند
        /// (علاوه بر اینکه ایندکس های ورتکست های خود گراف نیز هستند)
        ///  در آخر می آیم می بینیم اگه دونود که سر و ته ادج هستند در یک ست از دیسجوینت ست نیستند برشان می داریم
        /// </summary>
        /// <param name="graph"></param>
        /// <returns></returns>
        public static List <Edge <T> > KruskalUseTreeDisjointSt(Graph.G_LinkedListForm <T> graph)
        {
            List <Edge <T> > tempEdges   = graph.Edges;
            List <Edge <T> > resultEdges = new List <Edge <T> >();
            List <TreeNode <Vertex <T> > > tempVertices = new List <TreeNode <Vertex <T> > >();

            tempEdges.Sort();
            foreach (var graphVertex in graph.Vertices)
            {
                TreeNode <Vertex <T> > a = TreeForm <Vertex <T> > .Make(graphVertex);

                tempVertices.Add(a);
            }

            for (int i = 0; i < tempEdges.Count; i++)
            {
                if (!TreeForm <Vertex <T> > .Find(tempVertices[tempEdges[i].FirstVertex.NodeNumber]).Equals(TreeForm <Vertex <T> > .Find(tempVertices[tempEdges[i].SecondVertex.NodeNumber])))
                {
                    resultEdges.Add(tempEdges[i]);
                    TreeForm <Vertex <T> > .Union(tempVertices[tempEdges[i].FirstVertex.NodeNumber], tempVertices[tempEdges[i].SecondVertex.NodeNumber]);
                }
            }



            return(resultEdges);
        }