Я создал функцию, которая использует карты для алгоритма кратчайшего пути Дейкстры. Я близок к тому, что он работает правильно, но я сейчас застрял. Я знаю, что карты не являются наиболее эффективными и даже обычно не используются, и сделали это таким образом, чтобы лучше понять карты. Я считаю, что у меня в основном все правильно, но не может показаться, что оно повторяется и записывается в правильное местоположение в векторе расстояния. Это код:Алгоритм Dijsktra с использованием карт не правильно добавляет значения
void Graph::dikAlgorithm(string start, string finish)
{
nodeAmount = mapData.size();
vector<double> costVec(nodeAmount);
vector<bool> vis(nodeAmount);
vector<map<string, double>> keys;
for (auto& kv : mapData)
{
keys.push_back(kv.second);
}
int staIndex = distance(mapData.begin(), mapData.find(start));
int finIndex = distance(mapData.begin(), mapData.find(finish));
//initialize the distance vector to infinity
for (int i = 0; i < nodeAmount; ++i)
{
costVec[i] = INFINITY;
vis[i] = false;
}
//starting city distance is set to zero
costVec[staIndex] = 0;
for (int i = 0; i < nodeAmount; ++i)
{
int cur = -1;
for (int j = 0; j < nodeAmount; ++j)
{
//if visited node has been visted, continue incrementing j
if (vis[j]) continue;
//once an unvisted node has been reached, check to see if next is less than current
if (cur == -1 || costVec[j] < costVec[cur])
{
cur = j;
}
}
//set the visited node to solved
vis[cur] = true;
map<string, double>::iterator tempMap = keys[cur].begin();
//add the total distance using maps and vectors
for (int j = 0; j < keys[cur].size() - 1; j++)
{
double tempCost = tempMap->second;
double pathCost = costVec[cur] + tempCost;
if (pathCost < costVec[j])
{
costVec[distance(mapData.begin(), mapData.find(tempMap->first))] = pathCost;
}
tempMap++;
}
}
double answer = costVec[finIndex];
cout << "The least amount of money from " << start << " to " << finish << " is " << answer << endl;
}
Я считаю, что ошибка происходя после этой строки
map<string, double>::iterator tempMap = keys[cur].begin();
Эта ошибка является сохранение вектора расстояния от должным образом добавлены. Из-за этого я обычно получаю случайное значение из карты, являющейся кратчайшим путем или даже бесконечностью. Любая помощь будет принята с благодарностью. Не стесняйтесь спрашивать меня, нужны ли вам какие-либо подробности.
Он бросил ошибку говоря, не было никакого оператора, который соответствует этим операнды. Вы хотите, чтобы вы перебирали новый ключ с каждым прохождением цикла? – Giovanni