Добрый, день. Нужна помощь с заданием в учебной 1С. Есть два справочника "Города", в котором хранятся название городов. "Дороги", в котором хранятся данные города из которого выехали (ГородНачало, тип "Города") и город в которой приехали (ГородКонец, тип "Города"), а также данные расстояния между городами (тип число) в километрах. Нужно создать обработку, которая будет искать самый короткий путь между городами. В форме обработки должны быть реквизиты "ГородНачало", "ГородКонец" и "Расстояние". Например между городом А и Б есть две дороги в 5км и 10км. Нажав кнопку "найти кратчайший путь" в поле формы обработки "Расстояние" добавится число 5, так как это самый короткий путь. Заранее спасибо.
Думаю, что нет. Задача коммивояжёра, по моему - нахождение кратчайшего пути где будут все точки. В данной задаче просто минимальное расстояние между двумя. И таких одинаково минимальных и разных путей может быть несколько.
Данная задача больше похожа на задачу из ЕГЭ для школьников. Но там её чаще решают вручную.
Кроме А, Б, Расстояние, можно и сам путь нарисовать. Он всё равно будет формироваться в процессе решения для исключения зацикленностей.
Решается рекурсией. Рекурсивным запросом тоже можно, но не в 1С, так как 1С не поддерживает рекурсивные запросы.
(1) Если не нужно путь искать между ГородНачало и ГородКонец, а только прямые дороги, то задача крайне простая.
Вся сложность в том, что дороги разнонаправленные и сначала надо все их преобразовать от меньшего города к большему или наоборот.
Сначала их преобразовать где в начале будет всегда один город, а в конце всегда второй. Например:
***************************************************
ГородНачало, ГородКонец, 23
ГородНачало, ГородКонец, 15
ГородНачало, ГородКонец, 10
ГородНачало, ГородКонец, 5
Далее простое условие, где город начало это город начало, а город конец это город конец. И минимум продолжительности дороги.
Все это делается простым запросом.
Города это справочник. В справочнике всегда один элемент больше другого по ссылке. Не важно какой какого. Параметр в запрос тоже можно передать как МИН(ГородНачало, ГородКонец) и МАХ(ГородНачало, ГородКонец). А можно условие в запросе чуть дописать. Тут дело вкуса. Задача учебная, поэтому не важно.