Exemple #1
0
        private void Search_The_Way_Click(object sender, RoutedEventArgs e)
        {
            Method_Minti Method   = new Method_Minti(GraphExample_Setup(), matrix);
            GraphExMinti AftMinti = Method.find_the_way();

            tbSettingText.Clear();
            tbSettingText.AppendText("Список шляхів та відстаней:");
            tbSettingText.AppendText(Environment.NewLine);
            for (int i = 1; i < numOfVertices; i++)
            {
                string     LineRezult = "";
                DataVertex tmp        = AftMinti.Vertex[i].vert;
                tbSettingText.AppendText(string.Format("H = {0} Дуга: ", AftMinti.Vertex[i].dist));

                while (!(tmp == AftMinti.Vertex[0].vert))
                {
                    foreach (DataEdgeMinti j in AftMinti.Edges)
                    {
                        if (j.Edges.Target == tmp && j.Label)
                        {
                            if (tmp.Text.Length > 1)
                            {
                                char[] str = tmp.Text.ToCharArray();
                                Array.Reverse(str);
                                LineRezult += new string(str) + "-";
                                tmp         = j.Edges.Source;
                                break;
                            }
                            else
                            {
                                LineRezult += tmp.Text + "-";
                                tmp         = j.Edges.Source;
                                break;
                            }
                        }
                    }
                }
                LineRezult += "1";
                char[] s = LineRezult.ToCharArray();
                Array.Reverse(s);

                tbSettingText.AppendText(new string(s));
                tbSettingText.AppendText(Environment.NewLine);
            }
        }
Exemple #2
0
        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);
        }