es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo encontrar la profundidad máxima?

el gráfico

¿Cómo puedo hacer un método FindMaxDepth / Esta función encontrará la profundidad más larga del árbol (la distancia entre el nodo raíz y el último nodo hoja), la entrada que tomará la función es: (gráfico, nodoRaíz) y la salida será un valor numérico.

Ejemplo: Si se ingresa el siguiente gráfico y el nodoInicial = A, la salida debe ser 4

gráfico = {
    "A": ["B", "C"],
    "B": ["D", "E"],
    "C": ["F"],
    "D": [],
    "E": ["F"],
    "F": [],
}
visitados = []


def dfs(visitados, gráfico, raíz):
    if raíz no está en visitados:
        visitados.append(raíz)
        print(raíz)
        para hijo en gráfico[raíz]:
            dfs(visitados, gráfico, hijo)


dfs(visitados, gráfico, "A")


def bfs(gráfico, raíz):
    visitados = []
    cola = []
    visitados.append(raíz)
    cola.append(raíz)
    mientras cola:
        x = cola.pop(0)
        print(x)
        para hijo en gráfico[x]:
            si hijo no está en visitados:
                visitados.append(hijo)
                cola.append(hijo)


# bfs(gráfico, "A")
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear una función FindMaxDepth que encuentre la profundidad más larga del árbol, podemos utilizar una versión modificada del algoritmo DFS que realiza un seguimiento de la profundidad máxima vista hasta el momento. Aquí hay una implementación de ejemplo:

    def find_max_depth(graph, root):
        max_depth = 0
        stack = [(root, 0)]
        while stack:
            node, depth = stack.pop()
            max_depth = max(max_depth, depth)
            for child in graph[node]:
                stack.append((child, depth + 1))
        return max_depth
    

    En esta implementación, utilizamos una pila para realizar un seguimiento de los nodos a visitar, junto con su profundidad actual. Comenzamos con el nodo raíz y una profundidad de 0, y seguimos sacando nodos de la pila hasta que esté vacía. Por cada nodo que sacamos, actualizamos la profundidad máxima vista hasta el momento, luego añadimos cada uno de sus hijos a la pila con una profundidad un grado mayor que el nodo actual.

    Para usar esta función con el ejemplo de grafo y nodo raíz dado, llamaríamos:

    >>> graph = {
    ...     "A": ["B", "C"],
    ...     "B": ["D", "E"],
    ...     "C": ["F"],
    ...     "D": [],
    ...     "E": ["F"],
    ...     "F": [],
    ... }
    >>> find_max_depth(graph, "A")
    4
    

    Esto devuelve correctamente una profundidad máxima de 4, que es la distancia entre el nodo raíz A y el nodo hoja F.

Comments are closed.