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); } }
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); }