Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/08/2016, 04:47
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Llenar listas en funciones recursivas

Bueno, pues sigo con mi grafo y mis listas.

El problema que tengo es que uso funciones de recorrido por un grafo para llenar una lista con los valores de los nodos por donde pasa.

Y a falta de mejor solución, el problema lo soluciono de la siguiente forma:

1.- La lista (y una pila auxiliar) es miembro de la clase
2.- La llamada a la función de recorrido ha de ser mediante otra función que previamente ha de borrar el contenido de la lista para que no se acumulen valores.

La verdad es que no me gusta la solución, aunque funcione.

Pongo un ejemplo de lo que hago:
Código C++:
Ver original
  1. //*************************************//
  2. //recorrer el arbol a partir de un nodo//
  3. //*************************************//
  4.  
  5. template <typename datonodo_t, typename datoarista_t>
  6. const std::list<nodo<datonodo_t,datoarista_t>*>& Grafo<datonodo_t,datoarista_t>::recorrerGrafo(pNodo& inicio) const
  7. {
  8.     VaciarPila(pilaAristas);
  9.     listaNodos.clear();
  10.     return lista_recorrerGrafo(inicio);
  11. }
  12. template <typename datonodo_t, typename datoarista_t>
  13. const std::list<nodo<datonodo_t,datoarista_t>*>& Grafo<datonodo_t,datoarista_t>::lista_recorrerGrafo(pNodo& inicio) const
  14. {
  15.     pArista A;
  16.     if (inicio)
  17.     {
  18.         guardaAristas(inicio);
  19.         while (!pilaAristas.empty())
  20.         {
  21.             A=pilaAristas.top();
  22.             pilaAristas.pop();
  23.             listaNodos.push_back(A->nodo_destino);
  24.             lista_recorrerGrafo(A->nodo_destino);
  25.         }
  26.     }
  27.     return listaNodos;
  28. }

pilaAristas y listaNodos son miembros de la clase.
He de borrar el contenido de la pila auxiliar (pilaAristas) y de la lista que voy a rellenar. (listaNodos)
Para llamar a la función, llamo a una previa que se encarga de eso y que a su vez llama a la función que realmente hace el recorrido.

¿Hay alguna forma más clara de resolver este tipo de cuestiones?

Saludos y gracias!
__________________
Mi calculadora en Qt