コード例 #1
0
ファイル: Method_Minti.cs プロジェクト: Sami-umni/Merezha
        public Method_Minti(GraphExample graph, List <int[]> matrix)
        {
            baseGraph = graph;
            var listV = graph.Vertices.ToList();

            foreach (DataVertex t in listV)
            {
                var p = new DataVertexMinti(t);
                list_Vert_I.Add(p);
            }

            Matrix = matrix;
            var listE = graph.Edges.ToList();

            foreach (DataEdge t in listE)
            {
                var p = new DataEdgeMinti(t);
                list_Edges.Add(p);
            }
        }
コード例 #2
0
ファイル: Method_Minti.cs プロジェクト: Sami-umni/Merezha
        public GraphExMinti find_the_way()
        {
            //int[,] matr_dist = Distanse_Matr();
            DataVertexMinti temp = Search(list_Vert_I, 1);

            list_Vert_I.Remove(Search(list_Vert_I, 1));
            list_Vert_J.Add(temp);
            while (list_Vert_I.Count > 0)
            {
                int           min_dist     = int.MaxValue;
                DataEdgeMinti EdgeForLabel = null;
                foreach (DataVertexMinti i in list_Vert_J)
                {
                    //var tmp =  list_Edges.Select(p => p.Source == i.vert && !p.Label);     TRASH
                    foreach (DataEdgeMinti j in list_Edges)
                    {
                        if (!j.Label && j.Edges.Source == i.vert && list_Vert_I.Contains(Search(list_Vert_I, Convert.ToInt32(j.Edges.Target.ID))))
                        {
                            var dist = Convert.ToInt32(j.Edges.Weight) + Search(list_Vert_J, Convert.ToInt32(j.Edges.Source.ID)).dist;
                            if (min_dist > dist)
                            {
                                min_dist     = dist;
                                EdgeForLabel = j;
                            }
                        }
                    }
                }
                DataVertexMinti vetrexToDel = Search(list_Vert_I, Convert.ToInt32(EdgeForLabel.Edges.Target.ID));
                vetrexToDel.dist = min_dist;
                list_Vert_I.Remove(Search(list_Vert_I, Convert.ToInt32(EdgeForLabel.Edges.Target.ID)));
                list_Vert_J.Add(vetrexToDel);
                EdgeForLabel.Label = true;
            }
            Graph = new GraphExMinti(list_Edges, list_Vert_J);
            return(Graph);
        }