您的位置:首页 > 汽车 > 时评 > 欢迎回来请牢记网站域名_学校设计方案_整合营销的概念_网站百度收录要多久

欢迎回来请牢记网站域名_学校设计方案_整合营销的概念_网站百度收录要多久

2025/6/9 13:58:48 来源:https://blog.csdn.net/yongshiqq/article/details/146120006  浏览:    关键词:欢迎回来请牢记网站域名_学校设计方案_整合营销的概念_网站百度收录要多久
欢迎回来请牢记网站域名_学校设计方案_整合营销的概念_网站百度收录要多久

一、深度优先搜索(DFS)

原理

  • 沿着分支尽可能深入,直到到达叶子节点,然后回溯探索其他分支

  • 类似走迷宫时优先选择一条路走到黑,碰壁再回退

  • 数据结构:栈(Stack)或递归实现

  • 时间复杂度:O(V+E)(顶点数+边数)

  • // 递归实现(推荐)
    public void DFS(Node node, HashSet<Node> visited)
    {if (node == null || visited.Contains(node)) return;visited.Add(node);Console.Write(node.Value + " "); // 处理当前节点foreach (var neighbor in node.Neighbors){DFS(neighbor, visited); // 递归访问相邻节点}
    }// 栈实现
    public void DFS_Stack(Node root)
    {var stack = new Stack<Node>();var visited = new HashSet<Node>();stack.Push(root);while (stack.Count > 0){var current = stack.Pop();if (visited.Contains(current)) continue;visited.Add(current);Console.Write(current.Value + " ");// 注意:邻接节点要反向入栈(保持顺序)foreach (var neighbor in current.Neighbors.Reverse()){stack.Push(neighbor);}}
    }

    二、广度优先搜索(BFS)

    原理

  • 逐层向外扩展搜索,先访问离起点最近的节点

  • 类似水波纹扩散的效果

  • 数据结构:队列(Queue)

  • 时间复杂度:O(V+E)

  • public void BFS(Node root)
    {var queue = new Queue<Node>();var visited = new HashSet<Node>();queue.Enqueue(root);while (queue.Count > 0){var current = queue.Dequeue();if (visited.Contains(current)) continue;visited.Add(current);Console.Write(current.Value + " ");foreach (var neighbor in current.Neighbors){queue.Enqueue(neighbor);}}
    }

    三、核心区别对比

    特性深度优先搜索(DFS)广度优先搜索(BFS)
    数据结构栈/递归队列
    空间复杂度O(h)(树高)O(w)(最大宽度)
    适用场景拓扑排序、连通性检测最短路径、层级遍历
    解的性质不一定最短路径保证找到最短路径(无权图)
    内存消耗通常较小可能较大(存储层级节点)

 DFS 应用:

// 深度优先生成迷宫
private void GenerateMaze(int x, int y)
{var current = Cells[x, y];current.Visited = true;var directions = GetRandomDirections(); // 随机方向foreach (var dir in directions){// 递归深入相邻单元格if (CanMove(x, y, dir))GenerateMaze(newX, newY);}
}

 BFS 应用(路径查找优化):

// 广度优先查找最短路径
public List<Point> FindShortestPath(MazeCell start, MazeCell end)
{var queue = new Queue<MazeCell>();var visited = new HashSet<MazeCell>();var parentMap = new Dictionary<MazeCell, MazeCell>();queue.Enqueue(start);while (queue.Count > 0){var current = queue.Dequeue();if (current == end) break;foreach (var neighbor in GetAccessibleNeighbors(current)){if (!visited.Contains(neighbor)){parentMap[neighbor] = current;queue.Enqueue(neighbor);visited.Add(neighbor);}}}return ReconstructPath(parentMap, end);
}

五、选择依据
需要最短路径 → 选BFS(如迷宫求解)

内存敏感/深度优先特性 → 选DFS(如迷宫生成)

层级关系分析 → 选BFS(如社交网络层级分析)

存在性验证 → 两者均可(如节点是否可达)

两种算法在您的迷宫项目中可以配合使用:DFS生成随机迷宫,BFS寻找最优路径,这正是大多数迷宫算法的经典实现方式。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com