Найти кратчайший путь в графе - VB
Формулировка задачи:
Здравствуйте. Мне необходима помощь в решении курсовой. Необходимо найти кратчайший путь в направленном графе. Вот код моей программыИ так далее до проверки 35 пути(я 35 путей нашел). Возможно ли как то изменить данную программу или переделать ее, чтобы она стала меньше, т.к. при запуске выводит ошибку procedure too large. Во вложениях скрин с условием. Помогите если кто знает.
Private Sub Command2_Click() 'Объявляем пути Dim w1 As Double 'Объявляем путь 1 Dim w2 As Double 'Объявляем путь 2 Dim w3 As Double 'Объявляем путь 3 Dim w4 As Double 'Объявляем путь 4 Dim w5 As Double 'Объявляем путь 5 Dim w6 As Double 'Объявляем путь 6 Dim w7 As Double 'Объявляем путь 7 Dim w8 As Double 'Объявляем путь 8 Dim w9 As Double 'Объявляем путь 9 Dim w10 As Double 'Объявляем путь 10 Dim w11 As Double 'Объявляем путь 11 Dim w12 As Double 'Объявляем путь 12 Dim w13 As Double 'Объявляем путь 13 Dim w14 As Double 'Объявляем путь 14 Dim w15 As Double 'Объявляем путь 15 Dim w16 As Double 'Объявляем путь 16 Dim w17 As Double 'Объявляем путь 17 Dim w18 As Double 'Объявляем путь 18 Dim w19 As Double 'Объявляем путь 19 Dim w20 As Double 'Объявляем путь 20 Dim w21 As Double 'Объявляем путь 21 Dim w22 As Double 'Объявляем путь 22 Dim w23 As Double 'Объявляем путь 23 Dim w24 As Double 'Объявляем путь 24 Dim w25 As Double 'Объявляем путь 25 Dim w26 As Double 'Объявляем путь 26 Dim w27 As Double 'Объявляем путь 27 Dim w28 As Double 'Объявляем путь 28 Dim w29 As Double 'Объявляем путь 29 Dim w30 As Double 'Объявляем путь 30 Dim w31 As Double 'Объявляем путь 31 Dim w32 As Double 'Объявляем путь 32 Dim w33 As Double 'Объявляем путь 33 Dim w34 As Double 'Объявляем путь 34 Dim w35 As Double 'Объявляем путь 35 'Объявляем текстовые поля Dim t1 As Single 'Объявляем текстовое поле 1 Dim t2 As Single 'Объявляем текстовое поле 2 Dim t3 As Single 'Объявляем текстовое поле 3 Dim t4 As Single 'Объявляем текстовое поле 4 Dim t5 As Single 'Объявляем текстовое поле 5 Dim t6 As Single 'Объявляем текстовое поле 6 Dim t7 As Single 'Объявляем текстовое поле 7 Dim t8 As Single 'Объявляем текстовое поле 8 Dim t9 As Single 'Объявляем текстовое поле 9 Dim t10 As Single 'Объявляем текстовое поле 10 Dim t11 As Single 'Объявляем текстовое поле 11 Dim t12 As Single 'Объявляем текстовое поле 12 Dim t13 As Single 'Объявляем текстовое поле 13 Dim t14 As Single 'Объявляем текстовое поле 14 Dim t15 As Single 'Объявляем текстовое поле 15 Dim t16 As Single 'Объявляем текстовое поле 16 Dim t17 As Single 'Объявляем текстовое поле 17 Dim t18 As Single 'Объявляем текстовое поле 18 Dim t19 As Single 'Объявляем текстовое поле 19 Dim t20 As Single 'Объявляем текстовое поле 20 Dim t21 As Single 'Объявляем текстовое поле 21 Dim t22 As Single 'Объявляем текстовое поле 22 Dim t23 As Single 'Объявляем текстовое поле 23 Dim t24 As Single 'Объявляем текстовое поле 24 Dim t25 As Single 'Объявляем текстовое поле 25 Dim t26 As Single 'Объявляем текстовое поле 26 Dim t27 As Single 'Объявляем текстовое поле 27 Dim t28 As Single 'Объявляем текстовое поле 28 Dim t29 As Single 'Объявляем текстовое поле 29 Dim t30 As Single 'Объявляем текстовое поле 30 Dim t31 As Single 'Объявляем текстовое поле 31 Dim t32 As Single 'Объявляем текстовое поле 32 Dim t33 As Single 'Объявляем текстовое поле 33 'Считываем значения из полей t1 = Val(Text3.Text) t2 = Val(Text8.Text) t3 = Val(Text13.Text) t4 = Val(Text18.Text) t5 = Val(Text19.Text) t6 = Val(Text20.Text) t7 = Val(Text21.Text) t8 = Val(Text4.Text) t9 = Val(Text5.Text) t10 = Val(Text6.Text) t11 = Val(Text7.Text) t12 = Val(Text22.Text) t13 = Val(Text23.Text) t14 = Val(Text24.Text) t15 = Val(Text25.Text) t16 = Val(Text9.Text) t17 = Val(Text10.Text) t18 = Val(Text11.Text) t19 = Val(Text12.Text) t20 = Val(Text26.Text) t21 = Val(Text27.Text) t22 = Val(Text28.Text) t23 = Val(Text29.Text) t24 = Val(Text14.Text) t25 = Val(Text15.Text) t26 = Val(Text16.Text) t27 = Val(Text17.Text) t28 = Val(Text30.Text) t29 = Val(Text31.Text) t30 = Val(Text32.Text) t31 = Val(Text33.Text) 'Отмечаем пути w1 = t4 + t5 + t6 + t7 + t11 + t19 + t27 n1 = "Путь 1,11,14,17,19,18,16,20" w2 = t1 + t2 + t28 + t29 + t30 + t31 n2 = "Путь 1,5,8,10,9,7,4,20" w3 = t4 + t5 + t6 + t10 + t15 + t19 + t27 n3 = "Путь 1,11,14,17,15,18,16,20" w4 = t4 + t5 + t6 + t10 + t18 + t23 + t27 n4 = "Путь 1,11,14,17,15,13,16,20" w5 = t4 + t5 + t6 + t10 + t18 + t26 + t31 n5 = "Путь 1,11,14,17,15,13,4,20" w6 = t4 + t5 + t9 + t14 + t15 + t19 + t27 n6 = "Путь 1,11,14,12,15,18,16,20" w7 = t4 + t5 + t9 + t14 + t18 + t23 + t27 n7 = "Путь 1,11,14,12,15,13,16,20" w8 = t4 + t5 + t9 + t14 + t18 + t26 + t31 n8 = "Путь 1,11,14,12,15,13,4,20" w9 = t4 + t5 + t9 + t17 + t22 + t23 + t27 n9 = "Путь 1,11,14,12,3,13,16,20" w10 = t4 + t5 + t9 + t17 + t22 + t26 + t31 n10 = "Путь 1,11,14,12,3,13,4,20" w11 = t4 + t5 + t9 + t17 + t25 + t30 + t31 n11 = "Путь 1,11,14,12,3,7,4,20" w12 = t4 + t8 + t13 + t14 + t15 + t19 + t27 n12 = "Путь 1,11,2,12,15,18,16,20" w13 = t4 + t8 + t13 + t14 + t18 + t23 + t27 n13 = "Путь 1,11,2,12,15,13,16,20" w14 = t4 + t8 + t13 + t14 + t18 + t26 + t31 n14 = "Путь 1,11,2,12,15,13,4,20" w15 = t4 + t8 + t13 + t17 + t22 + t23 + t27 n15 = "Путь 1,11,2,12,3,13,16,20" w16 = t4 + t8 + t13 + t17 + t22 + t26 + t31 n16 = "Путь 1,11,2,12,3,13,4,20" w17 = t4 + t8 + t13 + t17 + t25 + t30 + t31 n17 = "Путь 1,11,2,12,3,7,4,20" w18 = t4 + t8 + t16 + t21 + t22 + t23 + t27 n18 = "Путь 1,11,2,6,3,13,16,20" w19 = t4 + t8 + t16 + t21 + t22 + t26 + t31 n19 = "Путь 1,11,2,6,3,13,4,20" w20 = t4 + t8 + t16 + t21 + t25 + t30 + t31 n20 = "Путь 1,11,2,6,3,7,4,20" w21 = t4 + t8 + t16 + t24 + t29 + t30 + t31 n21 = "Путь 1,11,2,6,9,7,4,20" w22 = t1 + t12 + t13 + t14 + t15 + t19 + t27 n22 = "Путь 1,5,2,12,15,18,16,20" w23 = t1 + t12 + t13 + t14 + t18 + t23 + t27 n23 = "Путь 1,5,2,12,15,13,16,20" w24 = t1 + t12 + t13 + t14 + t18 + t26 + t31 n24 = "Путь 1,5,2,12,15,13,4,20" w25 = t1 + t12 + t13 + t17 + t22 + t23 + t27 n25 = "Путь 1,5,2,12,3,13,16,20" w26 = t1 + t12 + t13 + t17 + t22 + t26 + t31 n26 = "Путь 1,5,2,12,3,13,4,20" w27 = t1 + t12 + t13 + t17 + t25 + t30 + t31 n27 = "Путь 1,5,2,12,3,7,4,20" w28 = t1 + t12 + t16 + t21 + t22 + t23 + t27 n28 = "Путь 1,5,2,6,3,13,16,20" w29 = t1 + t12 + t16 + t21 + t22 + t26 + t31 n29 = "Путь 1,5,2,6,3,13,4,20" w30 = t1 + t12 + t16 + t21 + t25 + t30 + t31 n30 = "Путь 1,5,2,6,3,7,4,20" w31 = t1 + t12 + t16 + t24 + t29 + t30 + t31 n31 = "Путь 1,5,2,6,9,7,4,20" w32 = t1 + t2 + t20 + t21 + t22 + t23 + t27 n32 = "Путь 1,5,8,6,3,13,16,20" w33 = t1 + t2 + t20 + t21 + t22 + t26 + t31 n33 = "Путь 1,5,8,6,3,13,4,20" w34 = t1 + t2 + t20 + t21 + t25 + t30 + t31 n34 = "Путь 1,5,8,6,3,7,4,20" w35 = t1 + t2 + t20 + t24 + t29 + t30 + t31 n35 = "Путь 1,5,8,6,9,7,4,20" 'Проверка на не цифру If Not IsNumeric(Text3.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text4.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text5.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text6.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text7.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text8.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text9.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text10.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text11.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text12.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text13.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text14.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text15.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text16.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text17.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text18.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text19.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text20.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text21.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text22.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text23.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text24.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text25.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text26.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text27.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text28.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text29.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text30.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text31.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text32.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else If Not IsNumeric(Text33.Text) Then MsgBox "Нужно ввести в поле цифру, а не букву" Else 'Сравнение путей и печать ответа If w1 <= w2 Or w1 <= w3 Or w1 <= w4 Or w1 <= w5 Or w1 <= w6 Or w1 <= w7 Or w1 <= w8 Or w1 <= w9 Or w1 <= w10 Or w1 <= w11 Or w1 <= w12 Or w1 <= w13 Or w1 <= w14 Or w1 <= w15 Or w1 <= w16 Or w1 <= w17 Or w1 <= w18 Or w1 <= w19 Or w1 <= w20 Or w1 <= w21 Or w1 <= w22 Or w1 <= w23 Or w1 <= w24 Or w1 <= w25 Or w1 <= w26 Or w1 <= w27 Or w1 <= w28 Or w1 <= w29 Or w1 <= w30 Or w1 <= w31 Or w1 <= w32 Or w1 <= w33 Or w1 <= w34 Or w1 <= w35 Then Text1.Text = "Путь 1,11,14,17,19,18,16,20" Text2.Text = w1 If w1 = w2 Then 'проверка на совпадение значений с другими путями Text1.Text = Text1.Text + n2 End If If w1 = w3 Then Text1.Text = Text1.Text + n3 End If If w1 = w4 Then Text1.Text = Text1.Text + n4 End If If w1 = w5 Then Text1.Text = Text1.Text + n5 End If If w1 = w6 Then Text1.Text = Text1.Text + n6 End If If w1 = w7 Then Text1.Text = Text1.Text + n7 End If If w1 = w8 Then Text1.Text = Text1.Text + n8 End If If w1 = w9 Then Text1.Text = Text1.Text + n9 End If If w1 = w10 Then Text1.Text = Text1.Text + n10 End If If w1 = w11 Then Text1.Text = Text1.Text + n11 End If If w1 = w12 Then Text1.Text = Text1.Text + n12 End If If w1 = w13 Then Text1.Text = Text1.Text + n13 End If If w1 = w14 Then Text1.Text = Text1.Text + n14 End If If w1 = w15 Then Text1.Text = Text1.Text + n15 End If If w1 = w16 Then Text1.Text = Text1.Text + n16 End If If w1 = w17 Then Text1.Text = Text1.Text + n17 End If If w1 = w18 Then Text1.Text = Text1.Text + n18 End If If w1 = w19 Then Text1.Text = Text1.Text + n19 End If If w1 = w20 Then Text1.Text = Text1.Text + n20 End If If w1 = w21 Then Text1.Text = Text1.Text + n21 End If If w1 = w22 Then Text1.Text = Text1.Text + n22 End If If w1 = w23 Then Text1.Text = Text1.Text + n23 End If If w1 = w24 Then Text1.Text = Text1.Text + n24 End If If w1 = w25 Then Text1.Text = Text1.Text + n25 End If If w1 = w26 Then Text1.Text = Text1.Text + n26 End If If w1 = w27 Then Text1.Text = Text1.Text + n27 End If If w1 = w28 Then Text1.Text = Text1.Text + n28 End If If w1 = w29 Then Text1.Text = Text1.Text + n29 End If If w1 = w30 Then Text1.Text = Text1.Text + n30 End If If w1 = w31 Then Text1.Text = Text1.Text + n31 End If If w1 = w32 Then Text1.Text = Text1.Text + n32 End If If w1 = w33 Then Text1.Text = Text1.Text + n33 End If If w1 = w34 Then Text1.Text = Text1.Text + n34 End If If w1 = w35 Then Text1.Text = Text1.Text + n35 End If Else If w2 <= w1 Or w2 <= w3 Or w2 <= w4 Or w2 <= w5 Or w2 <= w6 Or w2 <= w7 Or w2 <= w8 Or w2 <= w9 Or w2 <= w10 Or w2 <= w11 Or w2 <= w12 Or w2 <= w13 Or w2 <= w14 Or w2 <= w15 Or w2 <= w16 Or w2 <= w17 Or w2 <= w18 Or w2 <= w19 Or w2 <= w20 Or w2 <= w21 Or w2 <= w22 Or w2 <= w23 Or w2 <= w24 Or w2 <= w25 Or w2 <= w26 Or w2 <= w27 Or w2 <= w28 Or w2 <= w29 Or w2 <= w30 Or w2 <= w31 Or w2 <= w32 Or w2 <= w3 Or w2 <= w34 Or w2 <= w35 Then Text1.Text = "Путь 1,5,8,10,9,7,4,20" Text2.Text = w2
Решение задачи: «Найти кратчайший путь в графе»
textual
Листинг программы
for i=1 to 35 for j=1 to 35 if w(i)<=w(j) select case i
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д