我真的很难实现这两种方法。我已经得到了代码,只是努力将其付诸实践。 ref
给了我一个问题,我最后一次使用PreOrder
,PostOrder
和InOrder
,但我使用了string buffer
。我怎样才能使这段代码起作用 -
这是两种方法
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参数必须是可赋值变量
我所有的其他方法都很完美; 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)
。真的很想知道如何让它发挥作用。
请有人帮忙解释一下。
我有代码,它只是执行它。
编辑 - 我只是不知道要传递给参数的内容。
答案 0 :(得分:0)
myGraph.BreadthFirstTraverse(myGraph, ref 'a')
ref或out参数必须是可赋值变量
您不能将常量作为ref参数传递。如果你必须这样做,那就先创建它。
char youCanPassMeAsRef ='a';
myGraph.BreadthFirstTraverse(myGraph, ref youCanPassMeAsRef)