В интернете, к сожалению, я нашёл только алгоритм Дейкстры для матрицы смежности, но нигде нету алгоритма Дейкстры для матрицы инцидентности.
Моя матрица инцидентности (первый ряд цифр - номера вершин, то, что в {} - рёбра, всё остальное - вес; например, ребро {1;3} с весом 5 инцидентно вершине 3):
0 1 2 3 4 5 6 7
{0;1} 0 1 0 0 0 0 0 0
{0;2} 0 0 2 0 0 0 0 0
{1;2} 0 0 1 0 0 0 0 0
{1;3} 0 0 0 5 0 0 0 0
{1;4} 0 0 0 0 2 0 0 0
{2;3} 0 0 0 2 0 0 0 0
{2;4} 0 0 0 0 1 0 0 0
{2;5} 0 0 0 0 0 4 0 0
{3;4} 0 0 0 0 3 0 0 0
{3;5} 0 0 0 0 0 6 0 0
{3;6} 0 0 0 0 0 0 8 0
{4;5} 0 0 0 0 0 3 0 0
{4;6} 0 0 0 0 0 0 7 0
{5;6} 0 0 0 0 0 0 5 0
{5;7} 0 0 0 0 0 0 0 2
{6;7} 0 0 0 0 0 0 0 6
Для такого взвешенного орграфа:
В прямоугольниках - вес ребра, а в кружках просто номера вершин, не вес.
Я пытаюсь написать алгоритм, который через алгоритм Дейкстры выведет наикратчайшие пути от введённой с клавиатуры вершины до всех других, то есть должно выводится вес пути и сам путь (вершины, через которые проходит этот путь).
Буду благодарен, если поможете с написанием алгоритма =)
На всякий: матрицу я представляю через вектор в коде:
vector<vector<int>> incidenceMatrix = {
{0,1,0,0,0,0,0,0},
{0,0,2,0,0,0,0,0},
{0,0,1,0,0,0,0,0},
{0,0,0,5,0,0,0,0},
{0,0,0,0,2,0,0,0},
{0,0,0,2,0,0,0,0},
{0,0,0,0,1,0,0,0},
{0,0,0,0,0,4,0,0},
{0,0,0,0,3,0,0,0},
{0,0,0,0,0,6,0,0},
{0,0,0,0,0,0,8,0},
{0,0,0,0,0,3,0,0},
{0,0,0,0,0,0,7,0},
{0,0,0,0,0,0,5,0},
{0,0,0,0,0,0,0,2},
{0,0,0,0,0,0,0,6},
};