Primero, resolvamos el problema más simple donde el gráfico es un árbol. La solución aquí es sencilla. Haz un DFS desde cualquier vértice. Cada vez que pasa de un padre a un hijo, el borde se atravesará en la dirección hacia adelante y cuando regrese, se atravesará en la dirección inversa .
Si usamos el mismo algoritmo en un gráfico general, terminaremos atravesando solo los bordes en un árbol DFS del gráfico. Los bordes que nos faltarán serán aquellos entre vértices y sus antepasados no inmediatos en el árbol. Una ligera modificación asegurará que estos bordes también se cuiden. Esencialmente, cada vez que veas tal borde, solo recorrelo en ambas direcciones. Sin embargo, debemos asegurarnos de no contar dos veces dichos bordes tanto en el ancestro como en el descendiente; esto se puede garantizar manteniendo las profundidades de todos los vértices y atravesando el borde solo desde un vértice de menor profundidad a una mayor profundidad [ 1]
def dfs (u): te marca como visitado para todas las v adyacentes a u: si v no se visita establecer profundidad [v] = profundidad [u] +1 borde transversal u-> v dfs (v) borde transversal v-> u más si profundidad [v]> profundidad [u]: borde transversal u-> v borde transversal v-> u
[1] Me había perdido por completo el tema del doble conteo hasta que Garima Dhanania señaló el error después de dos años completos: -o. La versión anterior de esta respuesta tenía la solución incorrecta en la que atravesaba cada borde del árbol que no era dfs a cada vértice que no era el padre inmediato. Esto resultaría en un doble recuento, como lo mostró en su ejemplo.
- Explicar cómo funciona el ordenamiento de burbujas. ¿Cuál es su complejidad temporal?
- ¿Cuál es el enfoque para encontrar un acuerdo que produzca el salario mínimo?
- Si tuviera que aprender estructuras de datos y algoritmos nuevamente, ¿qué haría de manera diferente?
- Cómo mostrar el límite de (1 + a_n / n) ^ n = e ^ a si el límite de a_n = a cuando n se aproxima al infinito
- ¿Es necesario aprender matemáticas discretas antes de comenzar a aprender la estructura de datos y el algoritmo? ¿Y cuál será el mejor libro para hacer lo mismo?