Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2014, 21:56   #1
regina555555
Новичок
Джуниор
 
Регистрация: 13.12.2014
Сообщений: 1
Сообщение алгоритм Дейкстры С#. Помогите разобраться в коде!

Помогите пожалуйста разобраться в коде,срочно надо, а мало что понимаю тут

Код:
using System;
using System.Collections.Generic; 
using System.Linq;
using System.Text;

namespace konstruivania_grapf_test2
{
    class Dijkstra
    {
        public double[] dist { get; private set; }
        public int[] path { get; private set; }
              
        private List<int> queue = new List<int>(); 

  
        private void Initialize(int s, int len) 
           
        {
            dist = new double[len];
            path = new int[len];  //массив
                    


            for (int i = 0; i < len; i++)
            {
                dist[i] = Double.PositiveInfinity; 
                queue.Add(i);
            }
   
            dist[s] = 0;
            path[s] = -1;
        }

        private int GetNextVertex()

        {
            double min = Double.PositiveInfinity;
            int Vertex = -1;

            foreach (int j in queue)
            {
                if (dist[j] <= min)
                {
                    min = dist[j];
                    Vertex = j;
                }
            }

            queue.Remove(Vertex);

            return Vertex;

        }

        public Dijkstra(double[,] G, int s) 
        {

            if (G.GetLength(0) < 1 || G.GetLength(0) != G.GetLength(1))
            {
                throw new ArgumentException("Ошибка графа неверный формат");
            }

            int len = G.GetLength(0);

            Initialize(s, len);

            while (queue.Count > 0)
            {
                int u = GetNextVertex();

               
                for (int v = 0; v < len; v++)
                {
            
                    if (G[u, v] < 0)
                    {
                        throw new ArgumentException("содержимое графа отрицательно(s)");
                    }

                    if (G[u, v] > 0)
                    {
                       
                        if (dist[v] > dist[u] + G[u, v])
                        {
                            dist[v] = dist[u] + G[u, v];
                            path[v] = u;
                        }
                    }
                }
            }
        }
    }
}


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 14.12.2014 в 13:38.
regina555555 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться в коде p0keT Win Api 1 12.12.2014 13:56
Помогите разобраться в коде fate Общие вопросы по Java, Java SE, Kotlin 5 17.03.2009 22:10