Exemple #1
0
        /// <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)));
                        }
                    }
                }
            }
        }
Exemple #2
0
 /// <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);
     }
 }
Exemple #3
0
 /// <summary>
 /// Добавление вершины в граф
 /// </summary>
 /// <param name="index">Родительская вершина</param>
 /// <param name="newNode">Новая вершина</param>
 public void AddNode(long index, Path_nav newNode)
 {
     tree.Add(index, newNode);
 }