Question: C++ I need to figure out how to code the last function in my code. I need to use Dijkstra's algorithm. Here is all of

C++ I need to figure out how to code the last function in my code. I need to use Dijkstra's algorithm. Here is all of my code, but I need the last function and any explination to help understand it would be nice! I am pretty confident the rest of my code works, but any times would greatly be appreciated! Here are the directions for the function.

"Calculates the shortest path between the vertex with startLabel and the vertex with endLabel using Dijkstra's Algorithm. A vector is passed into the method that stores the shortest path between the vertices. The return value is the sum of the edges between the start and end vertices on the shortest path."

My code (Please answer in c++):

#include #include #include #include #include #include

using namespace std;

struct Edge { string src, dest; unsigned long magnit; };

struct Node { string vertices; vector mag; };

class Graph { private:

vector myList;

public: Graph(); ~Graph(); void print(); void addEdge(string start, string end, unsigned long magnitude); void addVertex(string vert); void removeVertex(string label); void removeEdge(string label1, string label2); unsigned long shortestPath(string startLabel, string endLabel, vector &path);

};

Graph::Graph() { }

Graph::~Graph() {

}

void Graph::addEdge(string start, string end, unsigned long magnitude) { int count = 0;

for (auto itr = myList.begin(); itr != myList.end(); itr++) { if (myList[count].vertices == start) { Edge *temp = new Edge(); temp->magnit = magnitude; temp->src = start; temp->dest = end; myList[count].mag.push_back(*temp); break; } count++; } }

void Graph::addVertex(string vert) { Node *temp = new Node(); temp->vertices = vert; myList.push_back(*temp); }

void Graph::removeVertex(string label) {

int count = 0; for (auto itr = myList.begin(); itr != myList.end(); itr++) { if (myList[count].vertices == label) { myList.erase(itr); cout << "Succesfully removed Vertex" << endl; break; } int j = 0;

for (auto itr2 = myList[count].mag.begin(); itr2 != myList[count].mag.end(); itr2++) { if (myList[count].mag[j].dest == label) { myList[count].mag.erase(myList[count].mag.begin() + j); break; } j++; } count++; } }

void Graph::removeEdge(string label1, string label2) { int i = 0; int j = 0; int count = 0;

for (auto itr = myList.begin(); itr != myList.end(); itr++) { int j = 0;

if (myList[i].vertices == label1) { for (auto itr2 = myList[count].mag.begin(); itr2 != myList[count].mag.end(); itr2++) { if (myList[i].mag[j].dest == label2) { myList[i].mag.erase(myList[i].mag.begin() + j); break; } j++; } count++; } } }

unsigned long Graph::shortestPath(string startLabel, string endLabel, vector &path) {

string newStart = startLabel; unsigned long shortestDistance = 0; return shortestDistance;; }

void Graph::print() { int count = 0; int i = 0; auto itr = myList.begin();

while (itr != myList.end()) {

int j = 0; for (auto itr2 = myList[i].mag.begin(); itr2 != myList[i].mag.end(); itr2++) {

cout << "Source: " << myList[i].mag[j].src << " Magnitude: " << myList[i].mag[j].magnit << " Destination: " << myList[i].mag[j].dest << endl; j++;

} i++; itr++; } }

int main() { Graph g;

vector vertices1 = { "1", "2", "3", "4", "5", "6" }; vector> edges1 = {{ "1", "2", 7 },{ "1", "3", 9 },{ "1", "6", 14 },{ "2", "3", 10 },{ "2", "4", 15 },{ "3", "4", 11 },{ "3", "6", 2 },{ "4", "5", 6 },{ "5", "6", 9 }, };

for (const auto label : vertices1) g.addVertex(label); for (const auto &tuple : edges1) g.addEdge(get<0>(tuple), get<1>(tuple), get<2>(tuple)); string temp = "1"; string temp2 = "5"; vector path; g.shortestPath(temp, temp2, path); return 0;

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!