BFS включает в себя посещение соседних узлов в режиме FIFO. Добравшись до узла, вы помещаете в очередь всех его соседей, если они еще не были посещены.
Во-первых, есть опечатка, в которой вы перебираете соседние узлы. Вы хотите пройти по столбцу top
, а не по src
:
adjMatrix[node * amountOfNodes + top] != 0
// ~~^
Во-вторых, ваша текущая path
реализация хранит порядок посещения узлов, не путь от источника до места назначения. Для последнего вам нужно сохранить родительский узел каждого узла, чтобы можно было восстановить окончательный путь, перейдя от дочернего (конечного пункта) к его родительскому, дедушке, прапрадедушке, ... и т. Д.
std::vector<int> parent(amountOfNodes, -1);
//...
if (visited[node] == false && (adjMatrix[node * amountOfNodes + top] != 0))
{
Queue.push(node); // Add to end.
visited[node] = true;
parent[node] = top;
}
Восстановление пути не вызывает затруднений:
int u = dest;
do
{
std::cout << u << " ";
u = parent[u];
}
while (u != -1);
DEMO