C#-如何将深度优先遍历/宽度优先遍历打印到控制台?

C#-如何将深度优先遍历/宽度优先遍历打印到控制台?,c#,breadth-first-search,depth-first-search,C#,Breadth First Search,Depth First Search,我正在努力将DepthFirstTraverse/BreadthFirstTraverse方法打印到控制台。我猜我需要一个for/foreach循环: 以下是我的方法: public void DepthFirstTraverse(T startID, ref List<T> visited) { LinkedList<T> adj; Stack<T> toVisit = new Stack<T>()

我正在努力将DepthFirstTraverse/BreadthFirstTraverse方法打印到控制台。我猜我需要一个
for/foreach
循环:

以下是我的方法:

    public void DepthFirstTraverse(T startID, ref List<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.ID);

            foreach (T type in adj)
            {
                if (!toVisit.Contains(type) && !visited.Contains((type)))
                {
                    toVisit.Push(type);
                }
            }
        }
    }

  public void BreadthFirstTraverse(T startID, ref List<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.ID);
                foreach (T ID in adj)
                {
                    if (!toVisit.Contains(ID) && !visited.Contains((ID)))
                    {
                        toVisit.Enqueue(ID);
                    }
                }
            }
        }

    }
public void DepthFirstTraverse(T startID,参考列表已访问)
{
链接列表;
Stack toVisit=新堆栈();
石墨极电流;
toVisit.Push(startID);//将第一个id推送到堆栈上
while(toVisit.Count!=0)
{
current=GetNodeByID(toVisit.Peek());
adj=current.GetAdjList();
已访问.添加(当前.ID);
foreach(T类型在adj中)
{
如果(!toVisit.Contains(type)&&!visted.Contains((type)))
{
toVisit.Push(类型);
}
}
}
}
公共空隙宽度第一次穿越(T开始,参考列表已访问)
{
链接列表;
Queue toVisit=新队列();
石墨极电流;
toVisit.Enqueue(startID);
while(toVisit.Count!=0)
{
//把它从名单上去掉
T currentID=toVisit.Dequeue();
当前=GetNodeByID(当前ID);
adj=current.GetAdjList();
//将当前信息添加到访问列表中,这样我们就知道我们去过哪里
已访问.添加(当前.ID);
foreach(调整中的T ID)
{
如果(!toVisit.Contains(ID)&&!visted.Contains((ID)))
{
toVisit.Enqueue(ID);
}
}
}
}
}
在我的程序类中,我创建了一个列表实例:

List x=新列表()

这就是调用方法:

myGraph.DepthFirstTraverse('A',参考x)

但我真的不知道如何使用这些方法来打印出所需的结果。有人能帮我吗

多谢各位


一切正常,没有问题。只是字面上我不太确定如何打印到控制台

您希望打印到控制台的内容是什么?可能是@Namirna的副本,我想逻辑上会说打印x,因为这是一个列表,并同时打印带有DFS/BFS的列表?@MikeMcCaughan是的,只是看了那篇文章,没有发现它太有用。这就是您真正想要的。如果这不是你要问的,你需要在你的帖子上写清楚你要问什么。