Ver Mensaje Individual
  #9 (permalink)  
Antiguo 28/06/2016, 12:35
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: Como declarar un tipo

Grafo.h (final):
Código C++:
Ver original
  1. //*************************************************************//
  2. //comprueba la existencia de un nodo igual al que quiero copiar//
  3. //necesario para evitar tener dos nodos iguales colgando del   //
  4. //mismo padre                                                  //
  5. //*************************************************************//
  6.  
  7. template <typename datonodo_t, typename datoarista_t>
  8. bool Grafo<datonodo_t,datoarista_t>::existeHermano (pNodo& padre, pNodo& hijo)
  9. {
  10.     pArista A=padre->adyacente;
  11.     while (A!=0)
  12.         {
  13.             //std::cout<<"posicionada la arista"<<A<<std::endl;
  14.             if (A->destino==hijo)
  15.                 {
  16.                     return true;
  17.                 }
  18.             A=A->siguiente;
  19.         }
  20.  
  21.     //std::cout<<"No hay gemelos"<<std::endl;
  22.     return false;
  23. }
  24.  
  25. //*********************************************//
  26. //comprueba la presencia de un nodo en la lista//
  27. //para evitar su inclusión por duplicado       //
  28. //*********************************************//
  29.  
  30. template <typename datonodo_t, typename datoarista_t>
  31. bool Grafo<datonodo_t,datoarista_t>::existeNodo (const pNodo& n)
  32. {
  33.     pNodo indice=Raiz;
  34.     if (n==indice)
  35.         return true;
  36.     else
  37.         {
  38.             while (indice->siguiente)
  39.                 {
  40.                     indice=indice->siguiente;
  41.                     if (n==indice)
  42.                         {
  43.                             return true;
  44.                         }
  45.                 }
  46.         }
  47.     return false;
  48. }
  49.  
  50. //***************************************************//
  51. //guarda las aristas que penden de un nodo en la pila//
  52. //***************************************************//
  53.  
  54. template <typename datonodo_t, typename datoarista_t>
  55. void Grafo<datonodo_t,datoarista_t>::guardaAristas (pNodo& n)
  56. {
  57.     pArista A;
  58.  
  59.     if (n && n->adyacente) //si hay aristas
  60.         {
  61.             A=n->adyacente;
  62.             //me posiciono en la última arista
  63.             while (A->siguiente!=0)
  64.                 {
  65.                     A=A->siguiente;
  66.                 }
  67.             //empiezo el recorrido hacia atrás
  68.             while (A->anterior!=0)
  69.                 {
  70.                     pila.push (A); //meto la arista en la pila
  71.                     A=A->anterior;
  72.                 }
  73.             pila.push (A); //meto la primera arista en la pila*/
  74.         }
  75. }
  76.  
  77. //**************************************************************//
  78. //guarda las aristas y el nivel que penden de un nodo en la pila//
  79. //**************************************************************//
  80.  
  81. template <typename datonodo_t, typename datoarista_t>
  82. void Grafo<datonodo_t,datoarista_t>::guardaAristasNivel (pNodo& n, int nivel)
  83. {
  84.     pArista A;
  85.     std::pair<pArista,int> pareja;
  86.     pareja.second=nivel;
  87.  
  88.     if (n && n->adyacente) //si hay aristas
  89.         {
  90.             A=n->adyacente;
  91.             //me posiciono en la última arista
  92.             while (A->siguiente!=0)
  93.                 {
  94.                     A=A->siguiente;
  95.                 }
  96.             //empiezo el recorrido hacia atrás
  97.             while (A->anterior!=0)
  98.                 {
  99.                     pareja.first=A;
  100.                     pilaniveles.push (pareja); //meto la arista en la pila
  101.                     A=A->anterior;
  102.                 }
  103.             pareja.first=A;
  104.             pilaniveles.push (pareja); //meto la arista en la pila
  105.         }
  106. }
  107.  
  108.  
  109. template <typename DATON, typename DATOA>
  110. nodo<DATON,DATOA>* Grafo<DATON,DATOA>::posicionarseEnNodo(datonodo_t dato)
  111. {
  112.     pNodo indice=Raiz;
  113.  
  114.     while (indice->siguiente!=0 && indice->datonodo!=dato)
  115.         {
  116.             indice=indice->siguiente;
  117.         }
  118.     if (indice->datonodo!=dato)
  119.         {
  120.             //std::cout<<"Nodo inválido"<<std::endl;
  121.             return 0;
  122.         }
  123.     else return indice;
  124. }
  125.  
  126. //*******************************//
  127. //obtiene el nivel del nodo padre//
  128. //** ****************************//
  129.  
  130. template <typename DATON, typename DATOA>
  131. int Grafo<DATON,DATOA>::NivelNodoPadre(pNodo& padre) const
  132. {
  133.     pNodo indice=Raiz;
  134.     pArista A;
  135.     while (indice)
  136.     {
  137.         if (indice->adyacente)
  138.         {
  139.             A=indice->adyacente;
  140.             while (A)
  141.             {
  142.                 if (A->destino==padre)
  143.                 {
  144.                     return A->nivel;
  145.                 }
  146.                 A=A->siguiente;
  147.             }
  148.         }
  149.         indice=indice->siguiente;
  150.     }
  151.     return -1; //en caso de error o de que no haya encotnrado el nodo padre.....
  152. }
  153.  
  154. #endif // GRAFO_H
__________________
Mi calculadora en Qt