Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

#include <vector> using namespace std; #include "shortestpath.

h" namespace coursera { namespace assign2 { ShortestPath::ShortestPath (IGraph* pGraph, PriorityQueue *pPQ) : mpGraph(pGraph ), mpPQ(pPQ) {} bool ShortestPath::path (vNumber_t srcVtxNum, vNumber_t destVtxNum) { vector<vNumber_t> nghs; vtxRouteInfo_t vri, minVri; set<vNumber_t> closedVertex; map<vNumber_t, vtxRouteInfo_t> closedVertexInfo; // preparing vri for source vertex vri.setupInfo (srcVtxNum, 0, srcVtxNum); mpPQ->insert (vri); minVri = vri; while (minVri.getVtxNum() != destVtxNum) { minVri = mpPQ->minPrioirty(); closedVertex.insert(minVri.getVtxNum()); closedVertexInfo.insert(std::make_pair(minVri.getVtxNum(), minVri)); mpGraph->neighbours (minVri.getVtxNum(), nghs); for (int i=0; i<nghs.size(); ++i) { // If not already in closed set if (closedVertex.find(nghs[i]) == closedVertex.end()) { // if already in queue weight_t wgtFromCurVtx = minVri.getWeight() + mpGraph->get_edge_value(minVri.get VtxNum(),nghs[0]); if (mpPQ->contains(nghs[i], vri)) { if ( wgtFromCurVtx < vri.getWeight()) { mpPQ->chgPrioirity(vri); } } else { vri.setupInfo (nghs[i], wgtFromCurVtx, minVri.getVtxNum()); mpPQ->insert (vri); } } } } if (minVri.getVtxNum() == destVtxNum) { closedVertex.insert(minVri.getVtxNum()); closedVertexInfo.insert(std::make_pair(minVri.getVtxNum(), minVri)); return true; } else { cout << "Path does not exist between nodes" << srcVtxNum << ", " << dest VtxNum << endl;

return false; } } weight_t ShortestPath::path_size (vNumber_t srcVtx, vNumber_t destVtx) { }

}}

You might also like