私は本当にこれらの2つの方法を実装するのに苦労しています。私はコードを手に入れましたが、それを実践するのに苦労しています。 ref
は私に問題を与えています。私は最後にPreOrder
、PostOrder
、InOrder
としましたが、string buffer
を使用しました。広さと深さ最初のトラバースの実装
- どのように私はこのコードは
をワーク・するために取得することができますここでここでは、2つの方法
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);
}
}
}
}
は私が出力 -
Console.WriteLine(string.Join, ',', myGraph.BreadthFirstTraverse(myGraph, ref 'a'));
を得ることで失敗だだ私は、このエラーメッセージが出続けますrefまたはout引数は割り当て可能な変数でなければなりません
私の他のすべてのmetho dsは完璧に動作します。 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)
。これを動作させる方法を本当に不思議に思っています。
お願いします。
私はコードを持っています。
EDIT - パラメータに何を渡すべきか分かりません。
私はまだコードに問題があります。今度は 'C#Argument 2:ref Graph.Graph 'から' ref System.Collections.Generic.List > '' –
ImTheOneWhoCodes
に変換できないというエラーがあります。右のタイプ。 – hometoast
はい、コンストラクタは 'BreadthFirstTraverse(T startID、refリストが訪問しました)'です。開始IDはchar 'A'を渡しますが、refリストは意味をなさない。私のメソッドの中には ' LinkedList adj; '私はそれを呼び出すことはできません。 –
ImTheOneWhoCodes