Advertisement
Guest User

Untitled

a guest
Oct 20th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. void Grafo::dijkstra(int origen)
  2. {
  3.     priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
  4.     pair<int, int> p;
  5.     pair<int, int> aux;
  6.     pair<int, int> adya;
  7.     int v, i;
  8.     vecAux[origen].setDistancia(0);
  9.     p.first = vecAux[origen].getDistancia();
  10.     p.second = origen;
  11.     q.push(p);
  12.     while (!q.empty())
  13.     {
  14.         i = 0;
  15.         aux = q.top();
  16.         q.pop();
  17.         v = aux.second;
  18.         if (!vecAux[v].getMarca())
  19.         {
  20.             vecAux[v].setMarca(true);
  21.             adya = sacarSigAdyacente2(v, i);
  22.             while (adya.first != -1)
  23.             {
  24.                 if (!vecAux[adya.first].getMarca() && adya.second > 0)
  25.                 {
  26.                     if (vecAux[v].getDistancia() + adya.second < vecAux[adya.first].getDistancia())
  27.                     {
  28.                         vecAux[adya.first].setDistancia(vecAux[v].getDistancia() + adya.second);
  29.                         vecAux[adya.first].setPadre(v);
  30.                         p.first = vecAux[adya.first].getDistancia();
  31.                         p.second = adya.first;
  32.                     }
  33.                 }
  34.                 adya = sacarSigAdyacente2(v, i);
  35.             }
  36.         }
  37.     }
  38. }
  39.  
  40. pair<int, int> Grafo::sacarSigAdyacente2(int v, int & i)
  41. {
  42.     pair<int, int> resp;
  43.     while (mat[v][i] == 0 && i < 50)
  44.         i++;
  45.  
  46.     if (i < 50)
  47.     {
  48.         resp.first = i;
  49.         resp.second = mat[v][i];
  50.     }
  51.     else
  52.     {
  53.         resp.first = -1;
  54.         resp.second = -1;
  55.     }
  56.     i++;
  57.     return resp;
  58. }
  59.  
  60. void Grafo::mostrarCamino(int origen, int destino, bool & b)
  61. {
  62.     if (vecAux[destino].getPadre() != -1)
  63.     {
  64.         mostrarCamino(origen, vecAux[destino].getPadre(), b);
  65.         if (b)
  66.             cout << vecAux[destino].getPadre() << endl;
  67.     }
  68.     else
  69.     {
  70.         if (destino == origen)
  71.             b = true;
  72.         else
  73.             cout << "no hay camino" << endl;
  74.     }
  75.  
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement