C#-如何将深度优先遍历/宽度优先遍历打印到控制台?
我正在努力将DepthFirstTraverse/BreadthFirstTraverse方法打印到控制台。我猜我需要一个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>()
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是的,只是看了那篇文章,没有发现它太有用。这就是您真正想要的。如果这不是你要问的,你需要在你的帖子上写清楚你要问什么。