深度优先搜索

深度优先搜索(Depth-First-Search)

从起点出发,走过的点要做标记,发现没有走过的点,就随意挑一个往前走,走不了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”

1.判断从V出发是否能走到终点

int main()
{
  将所有点标记为新点
  起点 = 1;
  终点 = 8;
  cout<

2.判断从V出发是否能走到终点,如果能,要记录路径:

int main()
{
  将所有点标记为新点;
  depth = 0;
  if(Dfs(起点))
  {
      for(int i=0;i<=depth;++i)
        cout<

3.深度优先遍历图上所有节点

Dfs (V) { 
  if( V是旧点 )
    return; 
  将V标记为旧点 ;
  对和 V相邻的每个点 U { 
    Dfs (U);
  }
}
int main() {
  将所有点 都标记为新;
  while( 在图中能找到新点 k)
  Dfs (k);
}

4.图的表示方法--邻接矩阵

用一个二维数组G存放图,G[i][j]表示节点i和节点j之间边的情况(如有无边,边方向,权值大小)
遍历复杂度(O(n^2)) n为节点数目

5.图的表示方法--邻接表

每个节点V对应一个一维数组(vector),里面存放从V连出去的边,边的信息包括另一顶点,还可能包含边权值等
遍历复杂度(O(n+e)) n为节点数目,e为边数目

你可能感兴趣的:(深度优先搜索)