2017-02-08 10 views
-1

私は本当にこれらの2つの方法を実装するのに苦労しています。私はコードを手に入れましたが、それを実践するのに苦労しています。 refは私に問題を与えています。私は最後にPreOrderPostOrderInOrderとしましたが、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 - パラメータに何を渡すべきか分かりません。

答えて

0
myGraph.BreadthFirstTraverse(myGraph, ref 'a') 

refまたはout引数は、あなたがREFパラメータとして定数を渡すことはできません

割り当て可能な変数でなければなりません。 にする必要がある場合は、最初に作成してください。

char youCanPassMeAsRef ='a'; 
myGraph.BreadthFirstTraverse(myGraph, ref youCanPassMeAsRef) 
+0

私はまだコードに問題があります。今度は 'C#Argument 2:ref Graph.Graph 'から' ref System.Collections.Generic.List > '' – ImTheOneWhoCodes

+0

に変換できないというエラーがあります。右のタイプ。 – hometoast

+0

はい、コンストラクタは 'BreadthFirstTraverse(T startID、refリストが訪問しました)'です。開始IDはchar 'A'を渡しますが、refリストは意味をなさない。私のメソッドの中には ' LinkedList adj; '私はそれを呼び出すことはできません。 – ImTheOneWhoCodes

関連する問題