【C++算法】树的层次(树的BFS) 从1走到n的最短距离,可以用图的bfs做,用一个队列,初始时,1入队,再将1的邻边入队,用数组d[N]表示距离,先初始化所有的点为-1,d【0】 = 1,如果此点没被更新,则被当前节点更新,避免重边和自环。
【C++算法】Dijkstra求最短路(朴素算法 + 堆优化) 适用于 n^2 ~ m的稠密图,二维数组g表示从i到j的距离,dist表示距离数组,设置dist[1] = 0,表示从第一个点开始,从第一个点更新相邻的边的距离,用 t 搜素出全场最短的路(定理:最短路的子路也是最短),并且标记t,因为最短,否则会一直选这个t,用最短的t更新t的邻边,进入下一个循环,再找到离1最短的点,再度更新…适用于 n ~ m的稀疏图,利用C++STL的priority_queue,特性为底层为堆,优先队列的队头为最小。就代替了朴素算法的t寻找全场最短距离,用邻接表存储所有的边。
【C++算法】树的重心(树的DFS) 本题目求解的是一个结点的子节点个数之和与除此之外的节点和最大值,与所有的结点的该属性对比,求出其中的最小值,类似于一个物体的重心。这是比较典型的树的DFS,可以用数组建立无向图的树,从任意一个节点开始遍历它的邻边,并且通过布尔数组标记此节点,计算出此节点的子树节点总和,剩余节点值和为(n-子树节点总和),再用一个全局变量ans记录其中最大值中的最小值。
【C++算法】DFS与BFS(例子详解 排列数字,n皇后问题 ,走迷宫) 深度优先搜索(DFS)与广度优先搜索(BFS)是两种实现搜索不同的方式,一般地,DFS相当于一条道走到底(递归加回溯),而BFS则是层层搜索(个人理解),下面通过几个例子分别理解这两种搜索方式blablabla。