/// <summary> /// Дополняем колекцию доступных узлов /// </summary> /// <param name="out_data">Выходная колекция</param> /// <param name="index">Текущая вершина</param> /// <param name="root_index">Вершина из которой пришли</param> private void AddOutData(ref Dictionary <long, List <NavigationWays> > out_data, long index, long root_index, long end) { long[] broth_indexes = new long[tree[index].path.Keys.Count]; tree[index].path.Keys.CopyTo(broth_indexes, 0); double path_crossed = 0; if (tree.ContainsKey(root_index)) { path_crossed = tree[root_index].temp_path_crossed; } if (!out_data.ContainsKey(index)) { out_data.Add(index, new List <NavigationWays>()); foreach (long broth_ind in broth_indexes) { if (broth_ind != root_index) { if (tree[broth_ind].temp_path_crossed == 0 || tree[broth_ind].temp_path_crossed > path_crossed + tree[index][broth_ind]) { out_data[index].Add( new NavigationWays(broth_ind, path_crossed + tree[index][broth_ind], Path_nav.calculationCost(tree[broth_ind].param, tree[end].param))); } } } } }
/// <summary> /// Конструктор графа /// </summary> /// <param name="data">Данные</param> /// <param name="node_separator">Разделитель по вершинам</param> /// <param name="data_separator">Разделитель по данным вершин</param> /// <param name="massive_element_separator">Разделитель колекций в данных для вершины</param> public Graf_nav(string data, char node_separator = '!', char data_separator = '/', char massive_element_separator = ';') { reverse_A_breaker = false; blocker = false; block_suc = false; index_intersection = -1; string[] pars_data = data.Split(node_separator); for (int i = 0; i < pars_data.Length; i++) { long index = Convert.ToInt64(pars_data[i].Split(data_separator)[0]); Path_nav new_path = new Path_nav(pars_data[i], data_separator, massive_element_separator); tree.Add(index, new_path); } }
/// <summary> /// Добавление вершины в граф /// </summary> /// <param name="index">Родительская вершина</param> /// <param name="newNode">Новая вершина</param> public void AddNode(long index, Path_nav newNode) { tree.Add(index, newNode); }