Hello... I have a problem with showing the shortest path, it calculated the correct distance, but I cant show the correct path it took, this is my code:
void Graph::calcShortestPath(string start, string dest){
int* next_hops = newint[nrOfCities];
distance = newint[nrOfCities]; //håller reda på kostnaden/timmarna
visited = newint[nrOfCities]; //håller de noder som redan är besökta
int testok = 0;
int chosen;
path = newint[7];
for (int i = 0; i < 7; i++)
{
path[i] = 0;
next_hops[i] = -1;
}
path[0] = getIndexOfCity(start); //lägger första noden i path till start
int nextNode = 0; //tar nästa nod i matrisen
int leastHours = 88888; //bara startvärde så att man lättare kan hitta mindre än, dessutom är det ett vänt infinity tecken
for (int i = 0; i < nrOfCities; i++) //lägger alla positioner till 0 respektive false
{
distance[i] = 0;
visited[i] = 0;
}
for (int i = 0; i < nrOfCities; i++)
{
distance[i] = adjacencyMatrix[getIndexOfCity(start)][i];
//next_hops[i] = nextNode;
}
distance[getIndexOfCity(start)] = 0; //distans till sig själv är alltid 0
for (int i = 0; i < nrOfCities; i++)
{
leastHours = 88888; //resettas ifall den har ändrats
for (int h = 0; h < nrOfCities; h++)
{
if (leastHours >= distance[h] && visited[h] != 1) //om detta värdet blir mindre och noden ej har varit besökt, lägg nytt värde på distans och välj platsen som nästa nod.
{
//har en counter för nrOfIn
leastHours = distance[h];
nextNode = h;
//next_hops[h] = nextNode;
}
}
next_hops[testok++] = nextNode;
visited[nextNode] = 1; //nästa nod läggs in i visited och då är den också "besökt"
//cout << nextNode << ", ";
for (int c = 0; c < nrOfCities; c++)
{
if (visited[c] != 1)
{
if (leastHours + adjacencyMatrix[nextNode][c] < distance[c])
{
distance[c] = leastHours + adjacencyMatrix[nextNode][c];
//next_hops[c] = nextNode;
//cout << adjacencyMatrix[c][nextNode];
}
}
}
}
cout << endl << "Shortest path from " << start << " to " << dest << " is " << distance[getIndexOfCity(dest)] << " hours long." << endl;
cout << "The path was: ";
for (int i = 0; i < 7; i++)
{
if (next_hops[i] != -1){
cout << next_hops[i] << ",";
cout << getCity(next_hops[i]) << endl;
}
}
cout << endl;
}