Este algoritmo hace un gran trabajo al atravesar los nodos en un gráfico.C# Graph Traversal
Dictionary<Node, bool> visited = new Dictionary<Node, bool>();
Queue<Node> worklist = new Queue<Node>();
visited.Add(this, false);
worklist.Enqueue(this);
while (worklist.Count != 0)
{
Node node = worklist.Dequeue();
foreach (Node neighbor in node.Neighbors)
{
if (!visited.ContainsKey(neighbor))
{
visited.Add(neighbor, false);
worklist.Enqueue(neighbor);
}
}
}
Puedo usar esto para buscar un nodo de destino en el gráfico. La lista de trabajo elimina (o muestra) los elementos a medida que se procesa la lista de trabajo. Una vez que encuentro el objetivo, ¿cómo puedo devolver la ruta completa al nodo?
Actualización Estoy tratando de encontrar la forma de revertir el camino a la raíz. El método se invoca en el nodo raíz, después de eso, los elementos secundarios pueden tener dos elementos principales, por lo que no es tan simple como llamar a la propiedad principal en cada nodo y realizar una copia de seguridad.
El objetivo del método es encontrar la ruta, no iterar todos los nodos, o verificar si existe un nodo.
tienes π.Add (vecino, visitado); y el valor del diccionario π es un nodo, ¿a qué hace un seguimiento en el valor? – blu
El predecesor. El diccionario aquí en realidad está actuando como una función: para un valor de entrada n, proporcione el nodo predecesor. La entrada es la clave, el valor de retorno es el valor. –
¿No sería eso π.Add (vecino, nodo) ;? El concepto suena bien, pero el código no es válido, solo creo que es un error tipográfico. – blu