У меня есть ориентированный граф, который, как я знаю, не имеет циклических зависимостей и имеет «конечные» узлы, то есть у них есть собственное свойство вершины, которое я могу проверить.Каждое ребро взвешивается с использованием встроенного свойства веса ребра BGL.
Что я хочу сделать, это пройтись от любой вершины по всем возможным путям, пока она не достигнет всех узлов завершения, которые могут быть достигнуты, и отследить "weighted "граничные веса каждого конечного узла достигнутыПод этим я подразумеваю, что следующее лучше всего объяснить следующим простым примером.
Скажем, из узла 4 следуют ребра с весами, и если T (завершение)
4->1 : 0.25 : T
4->5 : 0.45
4->6 : 0.5
5->2 : 0.65 : T
6->3 : 0.18
6->7 : 0.44 : T
3->1 : 0.33 : T
Я хочувернуть вектор пар, который является комбинацией узлов / «взвешенных» оконечных весов, которые были пройдены на его пути к каждому узлу, который в этом случае будет:
{1, 0.25 + (0.5*0.18*0.33) }
{2, (0.45*0.65)}
{7, (0.5*0.44)}
Final Result : [ {1, 0.2797}, {2, 0.2925}, {7, 0.22}]
«взвешенным»,я имею в виду, что каждый новый шаг взвешивается на произведение всех предыдущих весов ребер, пройденных по определенному пути.
Таким образом, от 4 до конечного узла 1 существует два пути.Прямое ребро до 1, взвешенное на 0,25.Существует также путь, который идет 4-> 6-> 3-> 1, так что это 0,5 * 0,18 * 0,33.Таким образом, для узла 1 мы имеем общий результирующий вес 0,25 + (0,5 * 0,18 * 0,33) = 0,2797.
Опять от 4 до конечного узла 2 существует путь к 4-> 5->2 (0,45 * 0,65), так что узел 2 = 0,2925
И, наконец, 4 до конечного узла 7, путь 4-> 6-> 7, (0,5 * 0,44), поэтому узел 7 = 0,22
Возможно ли это в BGL, я полагаю, мне нужен какой-то пользовательский посетитель / предшественник?
Любая помощь очень ценится.