From dcc033db9131f439a874c7ea14c05dc9aebd04ae Mon Sep 17 00:00:00 2001 From: Elijah Opoku-Nyarko Date: Sat, 23 Apr 2022 13:56:16 -0400 Subject: [PATCH] Started implemetation of shortest route --- project5 | Bin 157416 -> 188288 bytes project5.cc | 2 +- province.cc | 78 ++++++++++++++++++++++++++++++++++++++++- test-data/project5.out | 28 +++++++++++++++ 4 files changed, 106 insertions(+), 2 deletions(-) diff --git a/project5 b/project5 index bcd3cafa158c39d0889141921abd697eb6f3b924..e061e86f1dafc1e5c54ce20aeab8b6f6cb59b0d0 100755 GIT binary patch delta 37397 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 PH(6F@e`C*FE$jaS1BakT delta 22459 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 toVisit, + int numTowns) const { + int smallest = toVisit.front(); + + if (toVisit.size() > 1) { + for (int i = 0; i < numTowns; i++) { + if (dist[i] < dist[smallest]) { + bool found = (std::find(toVisit.begin(), toVisit.end(), i) + != toVisit.end()); + if (found) { + smallest = i; + } + } + } + } + return smallest; +} + +/** +* Print the shortest route from the capital of the +* province to each of the other towns +*/ +void Province::printShortestPath(std::ostream & output) const { + + // if there is only one town only one town + if (_numberOfTowns == 1) { + output << "There is only one town, so the provincial " + << "officials have no need of efficient routes!"; + return; + } + + output << "The shortest routes from " + _towns[0]._name; + output << " are:" << std::endl << std::endl; + + // keeps track of the index of the predecessor to each + // town(vertex) n on the shortest path to n + int prev[_numberOfTowns]; + + // queue to keep track of which town(vertex) to visit next + list toVisit; + + // keeps track of the distance from the capital to each town + // following the shortest path + double dist[_numberOfTowns]; + + + // set defaults for dist, prev, and add all vertices to toVisit + for (int i = 0; i < _numberOfTowns; i++) { + dist[i] = DBL_MAX; + toVisit.push_back(i); + } + + // distance from the capital to the capital is zero + dist[0] = 0.0; + + while (!toVisit.empty()) { + int smallestIndex = smallest(dist, toVisit, _numberOfTowns); + + toVisit.remove(smallestIndex); + + // Add current vertex's neighbors to the queue + for (Town::RoadList::iterator neighbor = + _towns[smallestIndex]._roads.begin(); + neighbor != _towns[smallestIndex]._roads.end(); neighbor++) { + // new distance needed for testing + double newDist = dist[smallestIndex] + neighbor->_length; + + // if new dist is smaller, replace the old one, and + // update the corresponding entry in prev + if (newDist < dist[neighbor->_head]) { + dist[neighbor->_head] = newDist; + prev[neighbor->_head] = smallestIndex; + } + } + } +} diff --git a/test-data/project5.out b/test-data/project5.out index d5d431a..8caeb26 100644 --- a/test-data/project5.out +++ b/test-data/project5.out @@ -24,6 +24,25 @@ The input data is : Danvers 4.2 mi +The shortest routes from Salem are: + + The shortest route from Salem to Wenham is 7.6 mi: + Salem + Beverly + Wenham + The shortest route from Salem to Beverly is 2.4 mi: + Salem + Beverly + The shortest route from Salem to Danvers is 3.7 mi: + Salem + Danvers + The shortest route from Salem to Lynn is 4.9 mi: + Salem + Lynn + +------------------------------------------------ +------------------------------------------------ + ------------------------------------------------ ---------------- New DataSet: ------------------ @@ -37,3 +56,12 @@ The input data is : Wenham 1 mi +The shortest routes from Wenham are: + + The shortest route from Wenham to Hamilton is 1 mi: + Wenham + Hamilton + +------------------------------------------------ +------------------------------------------------ +