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

Алгоритм Беллмана-Форда

25.04.2013, 18:01. Показов 14283. Ответов 2
Метки нет (Все метки)

Здравствуйте, уже какой день мучаюсь с реализацией этого алгоритма в С#, прочитал Википедию и мн-во других сайтов по поводу этого Алгоритма, и понял его действие "на бумаге", но запрограммировать ни как не удается, даже разжевывание на http://e-maxx.ru/algo/export_ford_bellman (код С++), не помогает. Господа, прошу помощи!

(Использую матрицу смежности, ниже прикрепил свой шаблон формы, для наглядности)
Миниатюры
Алгоритм Беллмана-Форда  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2013, 18:01
Ответы с готовыми решениями:

Визуализировать алгоритм Форда – Беллмана нахождения минимального пути на графе
Возможно пишу не совсем туда, но все же: Необходимо визуализировать алгоритм Форда – Беллмана...

Алгоритм Форда-Беллмана
У меня есть код алгоритма, но мне его надо переделать так, чтобы я сам вводил матрицу ( состоящую...

Алгоритм Беллмана-Форда
Здравствуйте. Может ли быть на входе доя алгоритма Беллмана-Форда граф, состоящий из ДВУХ вершин?...

Алгоритм Форда - Беллмана
Помогите пожалуйста понять что не так у меня. ограничение времени на тест: 1 сек. ограничение...

2
402 / 358 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
25.04.2013, 18:04 2
код в студию!
0
0 / 0 / 1
Регистрация: 14.07.2017
Сообщений: 2
25.04.2013, 18:07 3
Лучший ответ Сообщение было отмечено как решение

Решение

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
 V = (int)nudV.Value;
            int minindex = 0, count = 0; //  minindex-(из алгоритма "обводка")
            double min; // min - минимум (для сравнения пути)
            double[] a = new double[V];  // массив а 
            double[] b = new double[V];  //массив b 
 
            a[0] = 0;    // т.к расстояние от 1ой вершины в самой себе равно 0!
            for (int i = 1; i < V; i++)
                a[i] = double.PositiveInfinity;  // расстояние до других вершин ( как бы бессконечность ) 
            //double.PositiveInfinity - +бессконечность 
            for (int i = 0; i < V; i++)
                b[i] = 0;    // зануляем массив b
 
            rtb.Text += " Проход по столбцам, поиск веса ребер..." + "\n";  // Ведем запись значение ячеек по Столбцам, без учёта 0 
 
 
            /*Начало Алгоритма*/
            for (int i=0; ;i=minindex )
            {
                
                double A;
                A = a[i];
                
                    /*1ый цикл  */
                    for (int j = 0; j < V; j++)  // проход по столбцу
                    {
                        double N;
                        N = Convert.ToDouble(dgvMatrix[i, j].Value);  // N - вес ребра;
                        if (N != 0)
                        {
                            rtb.Text += N + " , "; // Если Вес Ребра !=0, записываем в rtb
                        }
                        if (N == 0)
                        {
                            continue; // Если в ходе цикла есть ячейка со значение 0, пропустить - идти дальше
                        }
 
                        if ((A + N) < a[j])
                        {
                            b[j] = A + N; // Элемент алгоритма - Сравнение 
                            
                            
                        }
                        
                        
                    }
                   
                  
                    /*Конец 1го цикла*/
                
                
            
                                min =Double.PositiveInfinity ; 
                /*2ой*/          for (int k = 0; k < V; k++)
                                {
                                    if (b[k] != 0) 
                                        a[k] = b[k];
                                             if ((b[k] < min) && (b[k] != 0))  // Сравниваем выбираем наименьшее число
                                            {
                                             minindex = k;   // обводка
                                             min = b[k];
                                            }
                                }
                                // b[minindex] = 0;
                                 a[minindex] = min;
                                 count++;
                                 if (count == (V - 1))
                                     break;
                 /*Конец*/        }
                         rtb.Text += "------------------------------------------------------------\n";
                         for (int i = 0; i < V; i++)
                         {
 
                             if (a[i] == 10000)
                             {
                                 rtb.Text += "Кратчайший путь до вершины " + (i + 1) + " = " + "Не существует - Вершина не является смежной " + "\n";
                             }
                             else if (i != 0)
                             {
                                 rtb.Text += "Кратчайший путь до вершины " + (i + 1) + " = " + a[i] + "\n";
                             }
                         } 
            }
Код кнопки "Вычислить" или "Мои бесполезные наброски"
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2013, 18:07
Помогаю со студенческими работами здесь

Алгоритм Форда-Беллмана.
Поиск кратчайшего пути, а также обход в глубь для поиска всех путей.

Алгоритм Беллмана-Форда
Здравствуйте всем. Я вообще редко обращаюсь сюда за помощью решить задачу и стыдно как то, но я не...

Алгоритм Форда-Беллмана
Доброго времени суток. Есть кривой код: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace...

Алгоритм Беллмана-Форда
В википедии описан такой алгоритм...


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

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

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