Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- #include <vector>
- #include <map>
- #define infi 0x7fffffff
- using namespace std;
- typedef pair<int,int> arco;
- //priority_queue< int, vector<int>, greater<int> > pq1;
- int min_camino(vector< vector<arco> > G, int x, int y){
- vector<bool> b(G.size(),false);
- vector<int> p(G.size(),infi);
- priority_queue< arco, vector<arco>, greater<arco> > Q;
- p[x] = 0;
- Q.push( arco(0,x) );
- while (not Q.empty()){
- int vertex = Q.top().second;
- Q.pop();
- if (not b[vertex]){
- b[vertex] = true;
- int tam = G[vertex].size();
- for (int i = 0; i < tam; ++i){
- int adyacente = G[vertex][i].second;
- int peso = G[vertex][i].first;
- if( (p[vertex]+peso) < p[adyacente] ){
- p[adyacente] = p[vertex]+peso;
- Q.push(arco(p[adyacente],adyacente));
- }
- }
- }
- }
- return p[y];
- }
- int main() {
- int n,m,u,v,w,x,y;
- while(cin >> n >> m){
- vector< vector<arco> > G(n,vector<arco>() );
- for(int i=0;i<m;++i){
- cin >> u >> v >> w;
- G[u].push_back( arco(w,v) ); //PRIMER VALOR: PESO || SEGUNDO VALOR: VERTICE ADYACENTE
- }
- cin >> x >> y;
- int r = min_camino(G,x,y);
- if( r!= infi )
- cout << r << endl;
- else
- cout << "no path from " << x << " to " << y << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement