Найти путь прохождения в наборах целей
У меня проблема обхода, и я попытался найти способ найти лучший обход в моей задаче.
Вопрос в том, что у меня есть несколько наборов, и каждый элемент имеет свой вес. Пусть список ниже..
('f12', 'f10', 'f15')
('f07', 'f05', 'f01', 'f15')
('f08', 'f05', 'f21')
('f07', 'f19', 'f15')
('f21', 'f10', 'f15')
('f07', 'f04', 'f01')
('f06', 'f07', 'f01', 'f15')
('f05', 'f04', 'f10', 'f15')
('f05', 'f21', 'f19', 'f15')
('f07', 'f02', 'f15')
('f07', 'f21', 'f01')
('f07', 'f21', 'f15')
('f18', 'f05', 'f01', 'f15')
('f07', 'f05', 'f21')
('f07', 'f12', 'f15')
('f05', 'f01', 'f17', 'f15')
('f08', 'f12', 'f15')
('f04', 'f01', 'f12')
('f10', 'f16', 'f17')
('f04', 'f21', 'f15')
('f07', 'f18', 'f15')
('f07', 'f16', 'f15')
('f07', 'f03', 'f15')
('f21', 'f03', 'f15')
('f03', 'f12', 'f15')
('f06', 'f10', 'f16', 'f15')
.....
И каждый fXX имеет относительно вес, называемый w1~w21. Я хочу найти лучший путь обхода с f1~f21(или самый короткий). И если я пройду один из этих сетов, я могу остановиться.
Например.. Если я перейду f01->f02->f04->f07, то остановлюсь, так как
('f07', 'f04', 'f01')
был обнаружен.
идея
- Я думал о FSM(конечный автомат), но я не знаю, как это сделать с весом?
Вопрос
Как я могу встроить такого рода проблемы в некоторый FSM или каким-либо образом, чтобы получить путь обхода? Он должен иметь элемент ввода? Правильно?
Заметка
Каждый fxx имеет результат True/False, и все условия завершения - это элемент "True" для одного из комбо. то есть, если результат fxx равен True, то собирать, иначе перейти к другому fxx.
и если все fxx уже прошли, и я не могу собрать то, что соответствует одному из комбо, тогда я могу вернуть "Not Found"