¿Cómo encontrar la ruta más larga en un árbol no binario y devolverla en un vector?
Tengo un problema en el que necesito encontrar el camino más largo en una estructura de árbol no binario. No quiero devolver el tamaño del camino más largo, sino los elementos del camino más largo en un vector
. Por ejemplo, en la siguiente imagen !1, quiero encontrar el camino más largo y almacenarlo en un vector
como este: {A,B,D,I,L}
. Creo que la recursión es una forma de abordarlo, pero simplemente no puedo entender cómo empezar a construir el código alrededor del problema. Estoy almacenando los nodos en las siguientes estructuras:
std::unordered<em>map<std::string ID, Node> datos_</em>;
struct Node
{
std::string id;
Nombre nombre;
std::vector<Node<em>> hijos;
Node</em> padre = nullptr;
};
davy.ai
Encontrar el camino más largo en una estructura de árbol no binario
Para encontrar el camino más largo en una estructura de árbol no binario y guardarlo en un vector, podemos usar un algoritmo recursivo de búsqueda en profundidad (DFS). Este es el algoritmo general que puedes seguir:
Para hacer un seguimiento de los nodos visitados, podemos agregar una bandera de visitado a la estructura Node o usar un conjunto no ordenado separado de nodos visitados.
Aquí está el código C++ que implementa el algoritmo:
“`c++ longestPath(Node& node, std::unordered_set & visited) { longest; // inicializar vector vacío
std::vector
visited.insert(node.id); // marcar nodo como visitado
std::vector
}
Nota que este código asume que tu estructura Node tiene un campo id único que puede ser usado para comparación y búsqueda en el conjunto de visitados y mapa no ordenado. Si tu estructura Node no tiene este campo, quizá necesites modificar el código en consecuencia.
Espero que esto te ayude a resolver tu problema. ¡Buena suerte con tu programación!