Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Llenar listas en funciones recursivas

Estas en el tema de Llenar listas en funciones recursivas en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 26/08/2016, 04:47
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
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

Etiquetas: const, funciones, listas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:01.