2 / 2 / 4
Регистрация: 19.10.2016
Сообщений: 45
1

Алгоритм Дейкстры

19.05.2017, 08:10. Показов 2204. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код был взят с плюсов и переписан на шарп
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
public i=3;
 public int v;
        private void button3_Click(object sender, EventArgs e)
        {
            int inf = 1000;                     // Бесконечность
            int p =i-1;
            int[,] a = new int[3, 3] { { 0, 1, 0 }, { 1, 0, 5 }, { 0, 5, 0 } };
          
            // Будем искать путь из вершины s в вершину g
            int s=Convert.ToInt32(comboBox3.Text);                      // Номер исходной вершины
            int g=Convert.ToInt32(comboBox4.Text);                      // Номер конечной вершины
            int[] x = new int[i];              //Массив, содержащий единицы и нули для каждой вершины,
                                  // x[i]=0 - еще не найден кратчайший путь в i-ю вершину,
                                 // x[i]=1 - кратчайший путь в i-ю вершину уже найден
            int[] t = new int[i];
            int[] h = new int[i];     //t[i] - длина кратчайшего пути от вершины s в i  
                                        //h[i] - вершина, предшествующая i-й вершине
                                        // на кратчайшем пути
 
   // Инициализируем начальные значения массивов
            int u;
            for (u = 0; u < p; u++)
            {
                t[u] = inf; //Сначала все кратчайшие пути из s в i 
                //равны бесконечности
                x[u] = 0;        // и нет кратчайшего пути ни для одной вершины
            }
 
            h[s] = 0; // s - начало пути, поэтому этой вершине ничего не предшествует
            t[s] = 0; // Кратчайший путь из s в s равен 0
            x[s] = 1; // Для вершины s найден кратчайший путь
            v = s;    // Делаем s текущей вершиной
        while(true)
   {
      // Перебираем все вершины, смежные v, и ищем для них кратчайший путь
      for(u=0;u<p;u++)
      {
         if(a[v,u]==0)continue; // Вершины u и v несмежные
         if(x[u]==0 && t[u]>t[v]+a[v,u]) //Если для вершины u еще не 
    //найден кратчайший путь
                // и новый путь в u короче чем 
    //старый, то
         {
            t[u]=t[v]+a[v,u];   //запоминаем более короткую длину пути в
    //массив t и
            h[u]=v; //запоминаем, что v->u часть кратчайшего 
    //пути из s->u
         }
      }
 
      // Ищем из всех длин некратчайших путей самый короткий
      int w=inf;  // Для поиска самого короткого пути
      v=-1;            // В конце поиска v - вершина, в которую будет 
                       // найден новый кратчайший путь. Она станет 
                       // текущей вершиной
      for(u=0;u<p;u++) // Перебираем все вершины.
      {
         if(x[u]==0 && t[u]<w) // Если для вершины не найден кратчайший 
                               // путь и если длина пути в вершину u меньше
                               // уже найденной, то
         {
            v=u; // текущей вершиной становится u-я вершина
            w=t[u];
         }
      }
      if(v==-1)
      {
         textBox4.Text="Нет пути из вершины "+ s+" в вершину "+g+".";
         break;
      }
      if(v==g) // Найден кратчайший путь,
      {        // выводим его
         textBox5.Text="Кратчайший путь из вершины "+s+" в вершину "+g+":";
       u=g;
       while(u!=s)
         {
            u=h[u];
         }
         textBox6.Text=" "+s+". Длина пути - "+t[g];
       break;
      }
      x[v]=1;
   }

На форме лежат 3 textBox
Переписал с C++ на C# , вроде правильно всё перенёс, но ненаходит пути

Добавлено через 9 часов 40 минут
up!

Добавлено через 12 часов 10 минут
up x2!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2017, 08:10
Ответы с готовыми решениями:

Графы, Алгоритм Дейкстры
Народ подскажите пожалустка как модернизировать алгоритм чтобы он определял минимальные пути, т.е...

Алгоритм Дейкстры не работает
Доброго времени суток, С# изучаю недавно, алгоритм то наверняка работает ... но я не вижу...

Нахождение кратчайшего пути между заданными городами (алгоритм Дейкстры)
Народ, подскажите пожалуйста, на кону допуск к сессии. Чего то я запутался с этими списками. Буду...

Визуализация алгоритма Дейкстры
Прошу помощи у вас. Вот прям умоляю, не пройдите мимо. Сижу и мучаюсь, пытаюсь разобраться, но пока...

1
2 / 2 / 4
Регистрация: 19.10.2016
Сообщений: 45
22.05.2017, 08:33  [ТС] 2
Help, не могу понять почему не считает правильно, пишет нет пути из 1 в 3 например,хоть он же существует!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2017, 08:33
Помогаю со студенческими работами здесь

Объяснить код алгоритмы Дейкстры
Есть код алгоритмы Дейкстры поиска кратчайших путей во взвешенном ориентированном графе. Объясните,...

Алгоритм Дейкстры
Нужно сделать визуализацию алгоритма Дейкстры, подскажите как это лучше сделать?

Алгоритм Дейкстры на двоичной куче
Добрый вечер! Подскажите, как реализовать Дейкстру на 2-куче? Как пишется куча - знаю, как пишется...

Кратчайшие пути , алгоритм Дейкстры
Кратчайшие пути , алгоритм Дейкстры


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru