c# - 深度优先搜索图无法正常工作

标签 c# algorithm graph-algorithm depth-first-search

我正在尝试执行深度优先搜索的 C# 实现。为了方便访问,我有一个 Dictionary<int, List<int>>存储顶点和边。

Dict 值是:

Vertex | Edges List
--------------------
0      | {1}
--------------------
1      |  {2}
--------------------
2      | {0} 
--------------------

static Dictionary<int, List<int>> dict = new Dictionary<int, List<int>>();

public class Graph
    {
        public int Vertex;
        public List<int> Edges;

        public Graph(int V, List<int> E)
        {
            Vertex = V;
            Edges = E;
            dict.Add(V, E);
        }

public void DFS(Graph g)
{
     Stack<int> stk = new Stack<int>();
     int[] visited = new int[4];

     stk.Push(g.Vertex);
     visited[0] = g.Vertex;
     int i = 1;
     while (stk.Count > 0)
     {
         foreach (var item in dict[stk.Peek()])
         {
             if (!visited.Contains(item))
             {
                 visited[i] = item;
                 stk.Push(item);
                 i++;
             }
         }
         Console.WriteLine(stk.Peek());
         stk.Pop();
    }
}

我在深度优先搜索中只得到 0 和 1。我知道有不同的方法可以做到这一点,但我相信我的方法也是其中一种方法,我需要帮助修复这段代码。

最佳答案

据我了解,您的代码执行以下操作:
1. 将第一个顶点压入堆栈
2. 偷看它,并搜索不在堆栈中的第一条边
3. 压栈
4. 偷看
5. 从栈中弹出。通过这一步,第一个顶点(在本例中为顶点 0)到达堆栈的顶部,然后您的代码转到 2.point。
由于一步无法从顶点 0 到达顶点 2,因此您的算法停止。

关于c# - 深度优先搜索图无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50924048/

相关文章:

c# datatable - 从数据表中有效地为每个主记录选择详细记录

c# - 尾递归优化发生在 visual studio 10 x64 调试中但不是在发布中?

python - 删除重复内容后尝试合并文件

javascript - 星算法在javascript中的实现

algorithm - 推流重新标记算法

algorithm - 添加新顶点后更新最小生成树

c# - DateTime.ParseExact 到可排序格式抛出异常

c# - 线性代数库

algorithm - 寻找具有最大权重的析取区间的子​​集

javascript - 合并两个数组时检查哪个元素更大?