【C++】经典算法总结

文章目录

  • 1. DFS和BFS
  • 2. Dijkstra算法

1. DFS和BFS

  • DFS(Depth First Search,深度优先搜索)是一种沿着图的深度遍历的算法。从起点开始,访问与该节点相邻的所有节点(称为邻居),直到不能继续访问为止。然后回溯到前一个节点,选择另一个邻居节点继续访问,一直重复此过程,直到遍历所有节点。DFS不使用额外的空间,是一种比较节省空间的算法,但可能会陷入死循环,因此需要标记访问过的节点。
  • BFS(Breadth First Search,广度优先算法)是一种按照节点的距离从起点开始遍历图的算法。从起点开始,将其所有邻居节点(即距离起点最近的节点)放入一个队列,并标记已经访问的节点。然后从队列首部取出一个节点访问其邻居节点,并将邻居节点入队,并标记已经访问的节点。重复此过程,直到遍历所有节点。BFS算法使用了队列来存储节点信息,虽然使用了额外的空间,但能够保证得到最短路径解。

2. Dijkstra算法

  • Dijkstra算法是一种用于解决单源最短路径问题的算法。它以一个顶点为起点,计算从该顶点到图中所有其他顶点的最短路径。Dijkstra算法使用贪心策略,每次从未被访问过的节点中选择一个距离起点最近的节点,并更新其相邻节点的最短路径。
  • 算法的基本步骤如下:
    1. 初始化:将起点到自身的距离设为0,将起点到其他所有顶点的距离设为无穷大。将起点加入已访问集合中。
    2. 从已访问集合中选取一个距离起点最近的顶点,将其加入已确定最短路径的顶点集合中。
    3. 对于已确定最短路径的顶点集合中的每个顶点,更新起点到该顶点的最短路径长度。如果新路径长度小于已知的最短路径长度,则更新最短路径长度。
    4. 对于已访问集合中的每个顶点,如果其相邻的未访问顶点的距离小于已知的最短路径长度,则更新该未访问顶点到起点的最短路径长度。
    5. 重复步骤2-4,直到所有顶点都已被访问或者已确定最短路径的顶点集合中的顶点数达到总顶点数。
  • Dijkstra算法的时间复杂度为O(|V|^2),其中|V|表示图中顶点的个数。它的优点是能够保证得到最短路径解,适用于稀疏图和存在负权边的图。缺点是需要额外的空间来存储最短路径长度和前驱节点信息。

你可能感兴趣的:(疑难解答,C++,算法)