Ich habe wirklich Mühe, diese beiden Methoden zu implementieren. Ich habe den Code aber nur gekämpft, um es in die Praxis umzusetzen. Die ref
gibt mir ein Problem, ich hatte es das letzte Mal mit PreOrder
, PostOrder
und InOrder
, aber ich verwendete eine string buffer
. Wie kann ich diesen CodeBreite und Tiefe Erste Traverse Implementierung
Ist hier die beiden Methoden
public void DepthFirstTraverse(T startID, ref List<GraphNode<T>> visited)
{
LinkedList<T> adj;
Stack<T> toVisit = new Stack<T>();
GraphNode<T> current;
toVisit.Push(startID); //push the first id onto the stack
while (toVisit.Count != 0)
{
current = GetNodeByID(toVisit.Peek());
adj = current.GetAdjList();
visited.Add(current);
foreach (T type in adj)
{
if (!toVisit.Contains(type) && !visited.Contains(GetNodeByID(type)))
{
toVisit.Push(type);
}
}
}
}
public void BreadthFirstTraverse(T startID, ref List<GraphNode<T>> visited)
{
LinkedList<T> adj;
Queue<T> toVisit = new Queue<T>();
GraphNode<T> current;
toVisit.Enqueue(startID);
while (toVisit.Count != 0)
{
//get it off from the list
T currentID = toVisit.Dequeue();
current = GetNodeByID(currentID);
adj = current.GetAdjList();
//add the current to the visited list, so we know where we have been
visited.Add(current);
foreach (T ID in adj)
{
if (!toVisit.Contains(ID) && !visited.Contains(GetNodeByID(ID)))
{
toVisit.Enqueue(ID);
}
}
}
}
Hier ist mein Fehler bei erhalte eine Output-
Console.WriteLine(string.Join, ',', myGraph.BreadthFirstTraverse(myGraph, ref 'a'));
Ich erhalte diese Fehlermeldung zu arbeits -
Ein Ref- oder Out-Argument muss eine zuweisbare Variable sein
Alle meine anderen Methoden ds funktioniert einwandfrei; IsEmptyGraph()
, ContainsGraph(GraphNode<T> node)
, IsAdjacent(GraphNode<T> from, GraphNode<T> to)
, AddNode(T id)
, GraphNode<T> GetNodeByID(T id)
, AddEdge(T from, T to)
. Ich frage mich wirklich, wie ich das zur Arbeit bringen soll.
Bitte kann jemand helfen, etwas Licht auf diese bitte zu werfen.
Ich habe den Code, es geht nur darum, alles auszuführen.
EDIT - Ich weiß nur nicht, was in die Parameter übergeben werden.
Ich sehe, ich habe immer noch ein Problem mit dem Code. Jetzt habe ich einen Fehler, der sagt 'C# Argument 2: kann nicht konvertieren von 'ref Graph.Graph zu' ref System.Collections.Generic.List > '' –
ImTheOneWhoCodes
in diesem Fall müssen Sie nur etwas von der übergeben richtiger Typ. – hometoast
Ja, der Konstruktor ist 'BreadthFirstTraverse (T startID, ref Liste> besucht)', die Start-ID überlasse ich ein char dh 'A', aber die ref Liste macht keinen Sinn, innerhalb meiner Methode gibt es eine Liste ' LinkedList adj; 'aber ich kann nicht scheinen, es zu nennen. –
ImTheOneWhoCodes