Dijkstras algorithim - show the shortest path problem

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82

void Graph::calcShortestPath(string start, string dest){
	
	int* next_hops = new int[nrOfCities];
	distance = new int[nrOfCities]; //håller reda på kostnaden/timmarna
	visited = new int[nrOfCities]; //håller de noder som redan är besökta
	int testok = 0;
	int chosen;

	path = new int[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;
}
Last edited on
Topic archived. No new replies allowed.