Ejemplo n.º 1
0
void RoadMap::visualizePath(list<uint> path){

    this->resetMap();
    uint stopNo = 1;
    list<uint>::const_iterator it = path.begin();
    list<uint>::const_iterator ite = path.end();

    Crossroad c = crossRoads.find(*it)->second;
    dijkstraShortestPath(c);

    //Set path source orange
    gv->setVertexColor(*it, "orange");
    gv->setVertexSize(*it, 20);

    it++;

    while(it != ite){
        //Sleep(1000);

        dijkstraShortestPath(c);

        Crossroad tmp = crossRoads.find(*it)->second;
        vector<Crossroad> subPath = getPath(c, tmp);
        stringstream ss;

        ss << "Paragem " << stopNo;

        for (uint i = 1; i < subPath.size()-1; ++i) {
            gv->setVertexColor(subPath[i].getId(), "yellow");
            gv->setVertexSize(subPath[i].getId(), 10);
        }

        gv->setVertexColor(*it, "pink");
        gv->setVertexSize(*it, 20);
        gv->setVertexLabel(*it, ss.str());

        gv->rearrange();
        c=tmp;

        stopNo++;
        it++;
    }

    //Set path destination red
    it--;
    gv->setVertexColor(*it, "red");
    gv->setVertexLabel(*it, "Destino");

    gv->rearrange();
}
Ejemplo n.º 2
0
bool RoadMap::insertNewDest(uint srcId, uint destId, list<uint> mustPass, list<uint> &path, list<double> &dist){
    Crossroad src = crossRoads.find(srcId)->second;
    list<uint>::iterator next;

    dijkstraShortestPath(src);

    if(mustPass.empty()){
        Crossroad dest = crossRoads.find(destId)->second;
        double minDist = getVertex(dest)->getDist();

        dist.push_back(dist.back() + minDist);
        path.push_back(destId);
    }
    else{
        double minDist = DBL_MAX;

        for (list<uint>::iterator it = mustPass.begin(); it != mustPass.end(); ++it) {
            Crossroad tmp = crossRoads.find(*it)->second;
            if(getVertex(tmp)->getDist() < minDist){
                minDist = getVertex(tmp)->getDist();
                next = it;
            }
        }

        dist.push_back(dist.back() + minDist);
        path.push_back(*next);

        mustPass.erase(next);

        insertNewDest(path.back(), destId, mustPass, path, dist);
    }

    return true;
}
Ejemplo n.º 3
0
double RoadMap::getDist(uint srcId, uint destId){
    Crossroad src = crossRoads.find(srcId)->second;
    Crossroad dest = crossRoads.find(destId)->second;

    dijkstraShortestPath(src);

    return getVertex(dest)->getDist();
}
Ejemplo n.º 4
0
void main(){
	 int matrix[5][5]={/* first node*/ {MAX_VALUE, 20, 70, MAX_VALUE, 50},
        /* second node*/{20, MAX_VALUE, 15, 40, MAX_VALUE},
        /* third node*/ {10, 15, MAX_VALUE, 70, MAX_VALUE},
        /* fourth node*/{MAX_VALUE, 40, 70, MAX_VALUE, 16},
        /* fifth node*/ {50, MAX_VALUE, MAX_VALUE, 16, MAX_VALUE}
	 };
	dijkstraShortestPath(matrix, 0, 5);
		
}
Ejemplo n.º 5
0
int main(int argc, char *argv[]){

	Graph *graph = NULL;
	int vertex, edges, end, start;

	scanf("%d %d", &vertex, &edges);

	graph = createGraph('L', 'D', vertex, edges);

	while((scanf("%d %d", &start, &end)) != EOF)
		dijkstraShortestPath(graph, start, end);

	freeGraph(&graph);

	return 0;
}
Ejemplo n.º 6
0
void RoadMap::insertNewSrc(uint srcId, uint destId, uint newSrc, list<uint>&mustPass, list<uint> &path, list<double> &dist){

    Crossroad src = crossRoads.find(srcId)->second;
    list<uint>::iterator next;

    dijkstraShortestPath(src);

    double minDist = DBL_MAX;

    for (list<uint>::iterator it = mustPass.begin(); it != mustPass.end(); ++it) {
        Crossroad tmp = crossRoads.find(*it)->second;
        if(getVertex(tmp)->getDist() < minDist){
            minDist = getVertex(tmp)->getDist();
            next = it;
        }
    }

    if(minDist == INT_INFINITY){
        cout << "Impossible!!!!!" <<endl;
        return;
    }
    if(*next == newSrc){
        dist.push_back(dist.back() + minDist);
        path.push_back(*next);

        mustPass.erase(next);

    }
    else{
        dist.push_back(dist.back() + minDist);
        path.push_back(*next);

        mustPass.erase(next);


        insertNewSrc(path.back(), destId, newSrc, mustPass, path, dist);
    }

}