Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4. #include <map>
  5. #define infi 0x7fffffff
  6. using namespace std;
  7.  
  8. typedef pair<int,int> arco;
  9.  
  10. //priority_queue< int, vector<int>, greater<int> > pq1;
  11.  
  12. int min_camino(vector< vector<arco> > G, int x, int y){
  13. vector<bool> b(G.size(),false);
  14. vector<int> p(G.size(),infi);
  15. priority_queue< arco, vector<arco>, greater<arco> > Q;
  16. p[x] = 0;
  17. Q.push( arco(0,x) );
  18. while (not Q.empty()){
  19. int vertex = Q.top().second;
  20. Q.pop();
  21. if (not b[vertex]){
  22. b[vertex] = true;
  23. int tam = G[vertex].size();
  24. for (int i = 0; i < tam; ++i){
  25. int adyacente = G[vertex][i].second;
  26. int peso = G[vertex][i].first;
  27. if( (p[vertex]+peso) < p[adyacente] ){
  28. p[adyacente] = p[vertex]+peso;
  29. Q.push(arco(p[adyacente],adyacente));
  30. }
  31. }
  32. }
  33. }
  34. return p[y];
  35. }
  36.  
  37. int main() {
  38. int n,m,u,v,w,x,y;
  39. while(cin >> n >> m){
  40. vector< vector<arco> > G(n,vector<arco>() );
  41. for(int i=0;i<m;++i){
  42. cin >> u >> v >> w;
  43. G[u].push_back( arco(w,v) ); //PRIMER VALOR: PESO || SEGUNDO VALOR: VERTICE ADYACENTE
  44. }
  45. cin >> x >> y;
  46. int r = min_camino(G,x,y);
  47. if( r!= infi )
  48. cout << r << endl;
  49. else
  50. cout << "no path from " << x << " to " << y << endl;
  51. }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement