Обработка "Матрица маршрута".
Разработана на платформе 1С:Предприятие 8.3 (8.3.12.1685). Управляемая форма.
Для использования необходимо сначала указать размер таблицы, в которой:
- заполняются города;
- на пересечении между городами - расстояние между ними;
В обработке при создании таблицы происходит демонстрационное заполнение. Город1, Город2 .... ГоронN.
Расстояние между ними заполняется с помощью генератора случайных чисел.
При использовании вы можете отключить эту часть кода, или настроить по своим потребностям.
После заполнения задаем маршрут: из какого Города в какой Город необходимо рассчитать кратчайшее расстояние.
При нажатии "Сформировать маршрут" - обработка формирует все возможные комбинации передвижения из пункта 1 в пунтк 2.
Если между какими то городами нет прямой дороги, тогда в таблице указывается значение "0". В этом случае такой маршрут исключается из возможных.
По диагонали таблица автоматически заполнена нолями, т.к. не имеет смысла перемещение из Города1 в Город1.
Для реализации расчета возможных маршрутов использован "Программный алгоритм составления перестановок, размещений и сочетаний"
Алгоритм представляет собой рекурсивную процедуру (т. е. процедуру, вызывающую саму себя с изменяющимися параметрами).
Полное описание механизма вы можете посмотреть на сайте:
Цибирова И.М. Программный алгоритм составления перестановок, размещений и сочетаний // Научный форум: Технические и физико-математические науки: сб. ст. по материалам XV междунар. науч.-практ. конф. — № 5(15). — М., Изд. «МЦНО», 2018. — С. 31-37.
Текст алгоритма, преобразованного в программный код 1С:
Sub CalcCombin(I As Integer, u As Integer)
Dim s As String, k As Integer, j As Integer
For k = u To N
If b(k) <> Empty Then
If i = M Then
c(i) = b(k)
s = ""
For j = 1 To M
s = s + c(j)
Next j
z = z + 1
znach(z) = s
Else
c(i) = b(k)
b(k) = Empty
If proverka = True Then
Call CalcCombin(i + 1, k + 1)
Else
Call CalcCombin(i + 1, 1)
End If
b(k) = c(i)
End If
End If
Next k
End Sub
Вот, пожалуй, и все. Возможно, кому-то будет полезна данная обработка.