Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <queue>
- using namespace std;
- vector <vector <pair<int, int> > > ady;
- #define INF (1 << 29)
- vector <int> Dijkstra(int nodoInicio, int nodoFinal)
- {
- vector <int> dist(ady.size(), INF);
- priority_queue <pair<int, int> > pq;
- vector <int> padres(ady.size(), -1);
- dist[nodoInicio] = 0;
- pq.push({0, nodoInicio});
- for(int q=0; q<ady.size()-1; q++)
- {
- int nodo = pq.top().second;
- pq.pop();
- for(int i=0; i<ady[nodo].size(); i++)
- {
- int vecino = ady[nodo][i].second;
- int costo = ady[nodo][i].first;
- if(dist[vecino] > dist[nodo] + costo)
- {
- dist[vecino] = dist[nodo] + costo;
- pq.push({-dist[vecino], vecino});
- padres[vecino] = nodo;
- }
- }
- }
- ///backtracking
- vector <int> camino;
- camino.push_back(nodoFinal);
- while(nodoFinal != nodoInicio)
- {
- nodoFinal = padres[nodoFinal];
- camino.push_back(nodoFinal);
- }
- for(int i=0; i<camino.size()/2; i++)
- swap(camino[i], camino[camino.size()-1-i]);
- return camino;
- }
- int main()
- {
- int n;
- vector <int> camino = Dijkstra(1, 5);
- cout << "El camino recorrido es: ";
- for(auto i:camino)
- cout << i << " ";
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment